我需要systemctl start myservice
在 Bash 脚本接近结尾时调用,但我真的不关心它是否会成功或它何时返回。我只需要开始行动。监视该服务的状态是其他人的任务。我的脚本应该尽快返回,无论该服务是否已完成启动,我不依赖于此。
我的第一个想法是使用这样的东西:
# do other work
systemctl start myservice &
echo "done"
# end of script
Run Code Online (Sandbox Code Playgroud)
但我读到,这对于信号或在通常调用我的脚本的非交互式环境中是有问题的。所以我继续阅读并找到了该nohup
命令,但这似乎会在任何地方写入输出文件,并且如果您不从 /dev/null 重定向标准输入,可能会挂起,他们说。
所以我仍然不知道如何正确地做到这一点。我愿意采用一种通用的方式来从 Bash 脚本启动并忘记任何进程,或者systemctl
特别地,因为这将是我目前唯一的用例。
ygo*_*goe 11
我找到了一个非常简单的解决方案:
systemctl start --no-block myservice
Run Code Online (Sandbox Code Playgroud)
该--no-block
选项可用于启动、停止等,并且它不会等待实际过程完成。更多详细信息请参见 的联机帮助页systemctl
。
如果您只是想启动systemctl
并且不想等待,请使用exec
调用来替换当前进程systemctl
。例如,无需将进程置于后台,只需使用:
exec systemctl ....
Run Code Online (Sandbox Code Playgroud)
您可能希望包含该--no-pager
选项以确保进程不会通过管道传输到寻呼机,这会阻止等待用户输入,例如
exec systemctl --no-pager ....
Run Code Online (Sandbox Code Playgroud)
当然,你的echo "done"
愿望永远不会实现,但这与你的剧本无关。
归档时间: |
|
查看次数: |
5712 次 |
最近记录: |