'systemd'杀死了普通的用户子进程

时间:2019-02-02 15:01:02

标签: systemd

我已经写了一个'systemd'的服务单元来运行我一直在运行的bash脚本,多年来一直用'/etc/rc.local'解决任何问题。 除了以下问题,'systemd'的服务正常运行: 我的bash脚本每5分钟运行以下几行:

nice --adjustment=$CommonNicePriority su root --command="HOME=$COMMON_DIR $0 $CyclesOption" # System common tasks.
for User in $Users # Run logged in users' tasks.
  do
    nice --adjustment=$UsersNicePriority su $User --command="$0 $CyclesOption"
  done

如您所见,它会生成一个进程,以“ root”(第一行)的身份运行,然后为每个登录的普通用户(循环)以(普通)用户身份运行一个进程。 以上每个过程都可以产生其他一些(任务)过程。以“ root”身份运行的进程可以正常运行,但对于普通用户运行的进程将被“ systemd”杀死。这些是来自“ / var / log / syslog”的行:

Feb  2 10:35:00 Linux-1 systemd[1]: Started User Manager for UID 0.
Feb  2 10:35:00 Linux-1 systemd[1]: Started Session c4 of user manolo.
Feb  2 10:35:00 Linux-1 systemd[1]: session-c4.scope: Killing process 31163 (CommonCron) with signal SIGTERM.
Feb  2 10:35:00 Linux-1 systemd[1]: session-c4.scope: Killing process 31164 (CommonCron) with signal SIGTERM.
Feb  2 10:35:00 Linux-1 systemd[1]: session-c4.scope: Killing process 31165 (CommonCron) with signal SIGTERM.
Feb  2 10:35:00 Linux-1 systemd[1]: Stopping Session c4 of user manolo.
Feb  2 10:35:00 Linux-1 systemd[1]: Stopped Session c4 of user manolo.
Feb  2 10:35:13 Linux-1 systemd[1]: Stopping User Manager for UID 0...

这是我的“系统服务”:

[Unit]
Description=CommonStartUpShutdown
Requires=local-fs.target
Wants=network.target

[Service]
Type=forking
ExecStart=/etc/after_boot.local
RemainAfterExit=yes
TimeoutSec=infinity
KillMode=none
ExecStop=/etc/before_halt.local

[Install]
WantedBy=local-fs.target

# How I think it works:
#   Service starts when target 'local-fs.target' is reached, preferably, when target 'network.target'
#     is also reached. This last target is reached even if the router is powered off (tested).
#   Service start sequence runs script: 'ExecStart=/etc/after_boot.local' which is expected
#     to spawn child processes and exit: 'Type=forking'. Child processes: 'CommonSystemStartUp's
#     children: 'CommonDaemon', 'CommonCron'... This script must exit with 0, otherwise systemd
#     will kill all child processes and wont run 'ExecStop' script. Service start can run as long
#     as it needs: 'TimeoutSec=infinity'.
#   Service is kept alive, after running 'ExecStart=...', by 'RemainAfterExit=true'.
#   When the service is stopped, at system shutdown, script 'ExecStop=/etc/before_halt.local'
#     will run for as long as necessary, 'TimeoutSec=infinity', before target
#     'local-fs.target' is lost: 'Requires=local-fs.target'.
#     'ExecStart=/etc/after_boot.local's children processes ('CommonDaemon', 'CommonCron'...) won't be
#     killed when 'ExecStop=/etc/before_halt.local' runs: 'KillMode=none'.

我尝试将'KillMode = none'移到[Unit]块:'systemd'抱怨。

还尝试了[Install]块中的“ WantedBy = multi-user.target.wants”:没什么区别。

0 个答案:

没有答案