service 是被 systemd 启动的,可是在 servrice 进入 loop 的时候,被 /lib/systemd/systemd kill 了。我为什么知道是被 systemd kill 了呢?因为我用 strace 命令追踪了它的系统调用。发现它向 service 发送了 SIGTERM 信号。如果用 systemctl start 重启,又会被杀。可是我如果手动键入命令行重启,就正常了。
老实说,以前只是粗浅了解过 systemd. 难道 systemd 发现了什么异常情况然后想杀掉 service?比如内存使用过多?因为我看启动 log 提示代码中有 calloc()函数分配失败的情况。不过由于代码过于庞大,目前还没有找到是哪里调用的 calloc () 。网上搜索了一下,发现 systemd 限制内存似乎要看 /sys/fs/cgroup/memory/system.slice/。可是我系统上连 /sys/fs/cgroup/memory 都不存在。
1
mons 2022-07-13 18:27:03 +08:00
|
2
huangya OP @mons 没有 systemd-oomd
root@RaspberryPi-Gateway:~# systemctl status systemd-oomd Unit systemd-oomd.service could not be found. |
3
changnet 2022-07-13 18:48:51 +08:00
系统杀进程,试下 dmesg 日志,一般的原因像 OOM 它都会告诉你这进程占了多少内存,权重是多少,然后被杀
|
4
charlie21 2022-07-13 18:52:53 +08:00 via iPhone
1 权限
2 它本身不是常驻后台进程 |
5
codehz 2022-07-13 18:57:03 +08:00 via Android
你先发出 service 文件看下呗
|
6
billlee 2022-07-13 19:49:14 +08:00 via Android
先看一下日志
sudo journalctl --unit 服务名 |
7
huangya OP @changnet 你说的这个是 linux kernel 发起的。对于这个问题 dmesg , 里面没有看大 linux kernel 的 oom killer 发起了 kill 进程的 log
|
8
huangya OP @codehz 因为是一个非常小众的 linux 路由器发行版,所以就没有发出来 service 文件。内容如下
[Unit] Description=Cosa service After=CcspPandMSsp.service [Service] Type=forking PIDFile=/var/tmp/CcspWifiAgent.pid WorkingDirectory=/usr/ccsp/wifi Environment="Subsys=eRT." Environment="LOG4C_RCPATH=/etc" EnvironmentFile=/etc/device.properties ExecStart=/usr/bin/CcspWifiSsp -subsys $Subsys ExecStopPost=/bin/sh -c 'echo "`date`: Stopping/Restarting CcspWifiSsp" >> ${PROCESS_RESTART_LOG}' ExecStartPost=/bin/sh -c '(/usr/ccsp/wifi/bridge_mode.sh)' #Restart=always |
10
qwq11 2022-07-13 22:33:02 +08:00 1
Google 搜了一下,第一个结果就是这个
https://unix.stackexchange.com/questions/200280/systemd-kills-service-immediately-after-start 简单来说,forking 要求服务启动后,立马 fork 出一个进程,然后退出,fork 出来的这个进程将被视为 service 的主进程,如果没有立马(超时前) fork 出进程,systemd 视其为启动失败,没有马上退出也是如此。你把 forking 改成 simple 应该就行。 可以读读上面那个链接,解释的很好,文笔也不错 |
11
julyclyde 2022-07-14 10:22:56 +08:00
如果是 TERM 信号,有很多是 Type 和实际情况不对应导致的,到超时时间,按照指定 Type 判断,仍未觉得这服务已经成功运行,就会重新启动一轮
如果 KILL 有可能是 oom 都是有日志可以看的 |