我仍然对 systemd 服务处于活动状态、进程仍在运行、未运行等感到困惑。
假设我有以下名为 my_script.sh 的基本 shell 脚本:
#!/bin/sh
touch /my_dir/my_file.txt
echo "Hello from my_script.sh" >> /my_dir/my_file.txt
我有一个名为 my_service.service 的系统服务,它调用 my_script.sh 如下:
[Unit]
Description=my service
[Service]
Type=simple
ExecStart=sh /my_dir/my_script.sh
RemainAfterExit=yes
Restart=always
[Install]
WantedBy=multi-user.target
事实上Restart=always
,这是否意味着一旦我的 shell 脚本执行完毕,它就应该一次又一次地执行,从而不断写入文件?
我的理解是,使用Restart=always
,无论是否干净退出,服务都会重新启动。这个说法我不太理解。 my_script.sh 执行后会干净退出吗?
现在RemainAfterExit=yes
,就我而言,定义或不定义这条线会产生什么影响?
预先感谢您消除任何疑问。
答案1
此行意味着当脚本以成功退出代码结束RemainAfterExit=yes
时,服务显示为活动状态。ExecStart
此行Restart=always
意味着在接下来的每个事件上重新启动:
- 清除退出代码或信号
- 不干净的退出代码
- 信号不干净
- 暂停
- 看门狗
如果您不需要在某些退出代码上重新启动服务,请选中此选项:
RestartPreventExitStatus=