如何设置 systemd 以确保它在服务器 shutdown/reboot 上停止我的应用程序
How to set systemd to be sure that it stops my application on server shutdown/reboot
我想将 systemd 设置为在我的服务器启动时启动我的应用程序,并在服务器关闭时干净地终止我的应用程序。
这是我的配置。文件:
[Unit]
Description=My Application
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/my_app start
ExecReload=/usr/local/bin/my_app reload
ExecStop=/usr/local/bin/my_app stop
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
我想我错过了什么,因为当我重新启动我的服务器时,没有关于关闭应用程序的日志。
重启后的日志:
# journalctl -u my_app.service
...
-- Reboot --
nov. 24 10:58:51 localhost systemd[1]: Starting My App...
nov. 24 10:58:51 localhost my_app[3173]: ############################################
nov. 24 10:58:51 localhost my_app[3173]: My App start at 2020-11-24 10:58:51
nov. 24 10:58:51 localhost my_app[3173]: ############################################
nov. 24 10:58:51 localhost my_app[3173]: Starting My App
nov. 24 10:58:51 localhost my_app[3173]: debut=Tue Nov 24 10:58:51 CET 2020
nov. 24 10:58:51 localhost my_app[3173]: Tue Nov 24 10:58:51 CET 2020
nov. 24 10:58:51 localhost my_app[3173]: Starting my_app... Saving PID 3185 to /var/run/my_app.pid
nov. 24 10:58:51 localhost my_app[3173]: Ok
nov. 24 10:58:51 localhost my_app[3173]: lock file created
nov. 24 10:58:51 localhost systemd[1]: Started My App.
但是关机后一切看起来都很好,我可以看到 nov. 24 13:47:27 localhost systemd[1]: Stopping My App...
关闭和服务器启动后的日志:
# journalctl -u my_app.service
...
-- Reboot --
...skipping...
nov. 24 13:43:45 localhost my_app[3138]: Tue Nov 24 13:43:45 CET 2020
nov. 24 13:43:45 localhost my_app[3138]: Starting my_app... Saving PID 3151 to /var/run/my_app.pid
nov. 24 13:43:45 localhost my_app[3138]: Ok
nov. 24 13:43:45 localhost systemd[1]: Started My App.
nov. 24 13:43:45 localhost my_app[3138]: lock file created
nov. 24 13:47:27 localhost systemd[1]: Stopping My App...
nov. 24 13:47:27 localhost my_app[3622]: ############################################
nov. 24 13:47:27 localhost my_app[3622]: My App stop at 2020-11-24 13:47:27
nov. 24 13:47:27 localhost my_app[3622]: ############################################
nov. 24 13:47:27 localhost my_app[3622]: Shutdown My App
nov. 24 13:47:27 localhost my_app[3622]: debut=Tue Nov 24 13:47:27 CET 2020
nov. 24 13:47:27 localhost my_app[3622]: Tue Nov 24 13:47:27 CET 2020
nov. 24 13:47:27 localhost my_app[3622]: root 3151 1 0 13:43 ? 00:00:00 ./ucybsmgr -iucybsmgr.ini AE_PROD
nov. 24 13:47:27 localhost my_app[3622]: root 3524 3151 0 13:44 ? 00:00:00 /usr/local/my_app/agents/linux/bin/ucxjlx6
nov. 24 13:47:27 localhost my_app[3622]: nfsnobo+ 3526 3524 0 13:44 ? 00:00:00 ucxjlx6-listener
nov. 24 13:47:27 localhost my_app[3622]: root 3649 3644 0 13:47 ? 00:00:00 grep uc
nov. 24 13:47:27 localhost my_app[3622]: Stopping my_app 3151
nov. 24 13:47:27 localhost my_app[3622]: Ok
nov. 24 13:47:27 localhost my_app[3622]: lock file removed
nov. 24 13:47:27 localhost systemd[1]: Stopped My App.
这就是为什么我对我的配置有一些疑问,所以如果有人能告诉我我是否错了?
感谢 @kamilcuk link 我做了一些更改,我的最终配置文件如下所示:
[Unit]
Description=My Application
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/my_app start
ExecReload=/usr/local/bin/my_app reload
ExecStop=/usr/local/bin/my_app stop
TimeoutStopSec=10
# KillMode=mixed
[Install]
WantedBy=multi-user.target
在重新启用之前,我已经禁用并删除了 /etc/systemd/
中的所有 link,因此在关机和重新启动时一切看起来都很好。
我想将 systemd 设置为在我的服务器启动时启动我的应用程序,并在服务器关闭时干净地终止我的应用程序。
这是我的配置。文件:
[Unit]
Description=My Application
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/my_app start
ExecReload=/usr/local/bin/my_app reload
ExecStop=/usr/local/bin/my_app stop
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
我想我错过了什么,因为当我重新启动我的服务器时,没有关于关闭应用程序的日志。
重启后的日志:
# journalctl -u my_app.service
...
-- Reboot --
nov. 24 10:58:51 localhost systemd[1]: Starting My App...
nov. 24 10:58:51 localhost my_app[3173]: ############################################
nov. 24 10:58:51 localhost my_app[3173]: My App start at 2020-11-24 10:58:51
nov. 24 10:58:51 localhost my_app[3173]: ############################################
nov. 24 10:58:51 localhost my_app[3173]: Starting My App
nov. 24 10:58:51 localhost my_app[3173]: debut=Tue Nov 24 10:58:51 CET 2020
nov. 24 10:58:51 localhost my_app[3173]: Tue Nov 24 10:58:51 CET 2020
nov. 24 10:58:51 localhost my_app[3173]: Starting my_app... Saving PID 3185 to /var/run/my_app.pid
nov. 24 10:58:51 localhost my_app[3173]: Ok
nov. 24 10:58:51 localhost my_app[3173]: lock file created
nov. 24 10:58:51 localhost systemd[1]: Started My App.
但是关机后一切看起来都很好,我可以看到 nov. 24 13:47:27 localhost systemd[1]: Stopping My App...
关闭和服务器启动后的日志:
# journalctl -u my_app.service
...
-- Reboot --
...skipping...
nov. 24 13:43:45 localhost my_app[3138]: Tue Nov 24 13:43:45 CET 2020
nov. 24 13:43:45 localhost my_app[3138]: Starting my_app... Saving PID 3151 to /var/run/my_app.pid
nov. 24 13:43:45 localhost my_app[3138]: Ok
nov. 24 13:43:45 localhost systemd[1]: Started My App.
nov. 24 13:43:45 localhost my_app[3138]: lock file created
nov. 24 13:47:27 localhost systemd[1]: Stopping My App...
nov. 24 13:47:27 localhost my_app[3622]: ############################################
nov. 24 13:47:27 localhost my_app[3622]: My App stop at 2020-11-24 13:47:27
nov. 24 13:47:27 localhost my_app[3622]: ############################################
nov. 24 13:47:27 localhost my_app[3622]: Shutdown My App
nov. 24 13:47:27 localhost my_app[3622]: debut=Tue Nov 24 13:47:27 CET 2020
nov. 24 13:47:27 localhost my_app[3622]: Tue Nov 24 13:47:27 CET 2020
nov. 24 13:47:27 localhost my_app[3622]: root 3151 1 0 13:43 ? 00:00:00 ./ucybsmgr -iucybsmgr.ini AE_PROD
nov. 24 13:47:27 localhost my_app[3622]: root 3524 3151 0 13:44 ? 00:00:00 /usr/local/my_app/agents/linux/bin/ucxjlx6
nov. 24 13:47:27 localhost my_app[3622]: nfsnobo+ 3526 3524 0 13:44 ? 00:00:00 ucxjlx6-listener
nov. 24 13:47:27 localhost my_app[3622]: root 3649 3644 0 13:47 ? 00:00:00 grep uc
nov. 24 13:47:27 localhost my_app[3622]: Stopping my_app 3151
nov. 24 13:47:27 localhost my_app[3622]: Ok
nov. 24 13:47:27 localhost my_app[3622]: lock file removed
nov. 24 13:47:27 localhost systemd[1]: Stopped My App.
这就是为什么我对我的配置有一些疑问,所以如果有人能告诉我我是否错了?
感谢 @kamilcuk link 我做了一些更改,我的最终配置文件如下所示:
[Unit]
Description=My Application
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/my_app start
ExecReload=/usr/local/bin/my_app reload
ExecStop=/usr/local/bin/my_app stop
TimeoutStopSec=10
# KillMode=mixed
[Install]
WantedBy=multi-user.target
在重新启用之前,我已经禁用并删除了 /etc/systemd/
中的所有 link,因此在关机和重新启动时一切看起来都很好。