首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统Restart=always混淆

系统Restart=always混淆
EN

Unix & Linux用户
提问于 2019-06-12 12:22:37
回答 1查看 5.5K关注 0票数 2

当我们创建并启动运行系统服务时,如果我们在Restart=always文件中包含.service,那么运行脚本是否意味着它在脚本完成后再次执行ExecStart,从而在循环中继续执行脚本?

我正在查看项目中的一个服务文件,如下所示,并试图确切地了解这里正在发生的事情。app_script.sh启动是否被连续调用,或者只有在系统服务停止时才被调用?我对此很困惑。

代码语言:javascript
复制
[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
EN

回答 1

Unix & Linux用户

发布于 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将认为您的服务流程已经退出。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/524418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档