当我们创建并启动运行系统服务时,如果我们在Restart=always文件中包含.service,那么运行脚本是否意味着它在脚本完成后再次执行ExecStart,从而在循环中继续执行脚本?
我正在查看项目中的一个服务文件,如下所示,并试图确切地了解这里正在发生的事情。app_script.sh启动是否被连续调用,或者只有在系统服务停止时才被调用?我对此很困惑。
[Unit]
Description=application script
ConditionPathExists=/application
After=network.target app.service data.service
[Service]
Type=simple
ExecStart=/application/app_script.sh start
ExecStop=/application/app_script.sh stop
#RemainAfterExit=yes
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target发布于 2019-06-14 17:06:25
如果我们将Restart=always包含在.service文件中,这是否意味着它在脚本完成后再次执行ExecStart,从而在循环中继续执行脚本?
只有在已启动的进程退出时才会调用Restart选项;对于always,根据systemd.service文档,如果进程因以下原因退出,则将重新启动服务:
文件接着说:
作为上述设置的例外,如果在RestartPreventExitStatus=中指定了退出代码或信号,或者使用systemctl停止或等效操作停止服务,则服务将不会重新启动。此外,如果退出代码或信号是在RestartForceExitStatus=中指定的,则服务将始终重新启动(参见下面)。
由于您不是在配置RestartForceExitStatus或RestartPreventExitStatus,所以只有systemd在systemctl stop (“或等效操作”)期间才会停止该进程。
app_script.sh启动是否被连续调用,或者只有在系统服务停止时才被调用?
就这一点而言,两者都不是。如上文所述,它不会被连续调用。如果服务停止(当然,除了调用/application/app_script.sh stop ),它也不会被调用;只有在服务启动进程停止时才调用。
请注意,Type=simple服务指示systemd将ExecStart参数视为实际服务。/application/app_script.sh start的命名约定意味着涉及一个shell脚本,它可能调用一个或多个其他脚本或二进制文件。如果shell脚本分叉了该进程并退出,systemd将认为您的服务流程已经退出。
https://unix.stackexchange.com/questions/524418
复制相似问题