Debian 系统中“进程自动退出”是一个非常常见但也非常宽泛的问题。要准确判断原因,需要看是什么进程、怎么启动的、退出时有什么日志。下面我按常见原因分类给你一个系统性的排查思路。
很多程序本来就是“跑完就退”的:
✅ 判断:
echo $?
如果是 0,通常是正常退出。
Debian 在内存耗尽时会触发 OOM Killer。
查看是否被杀:
dmesg | egrep -i "killed|oom"
journalctl -k | grep -i oom
典型表现:
如果你是 systemd 启动的进程:
Type=simple
但程序是 fork() 的
→ systemd 认为主进程退出,直接杀掉子进程
或:
Restart=no
→ 一退出就不再拉起
✅ 正确示例( daemon 程序):
[Service]
Type=forking
ExecStart=/usr/bin/xxx
Restart=on-failure
查看:
systemctl status xxx
journalctl -u xxx
很多程序:
一旦:
nohup 没写对就会收到 SIGHUP 退出。
✅ 正确方式:
nohup your_app > app.log 2>&1 &
或
setsid your_app
常见来源:
systemctl stopkill查看:
journalctl -u xxx
dmesg
比如:
程序直接 exit(1)。
✅ 查看:
journalctl -u xxx --no-pager
如果是:
su user
./app
然后退出 shell
→ 进程可能被杀
✅ 解决:
systemd-run --scope ./app
或写成 service
--memorysleep 型进程被调度杀掉你可以按顺序查:
# 1. 是否被 OOM
dmesg | grep -i oom
# 2. systemd 状态
systemctl status 服务名
# 3. 日志
journalctl -u 服务名 --since "10 min ago"
# 4. 手动跑看报错
./程序
echo $?
你可以直接告诉我:
cat /etc/debian_version)我可以直接帮你改配置或分析日志。