![当应用程序崩溃时重新启动它](https://linux22.com/image/945053/%E5%BD%93%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%B4%A9%E6%BA%83%E6%97%B6%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E5%AE%83.png)
我声明我几乎一无所知,我找到了一些可以解决我的情况的解决方案,但它并不完全符合我的期望。实际上,我想创建一个脚本,当启动始终保持对程序的主动监听时,如果程序自行关闭,它必须重新打开它。我发现了类似这样的内容:
if ! pgrep -x "gedit" > /dev/null
then
echo "Stopped"
fi
但首先我希望你不要回显,而是重新启动应用程序。
然后我希望脚本始终保持活动状态。也就是说,我启动它,直到我停止它,我都会做这件事。再说一遍,我不是这些事情的专家,我也没有研究过这个。我会处理其他所有事情,所以请寻求帮助,因为我需要这个。
编辑:
按照回复我的 Jos 的指导,我尝试使用以下命令创建 file.service:
[Unit]
Description=Sky linux restarting
[Service]
User=My pc name
ExecStart=/bin/sh -c 'sky'
ExecStop=/bin/sh -c 'sky'
ExecRestart=/bin/sh -c 'sky'
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
但是当我用它运行它时:
sudo systemctl start your-service.service
什么也不做
答案1
将脚本配置为systemd
服务,然后systemd
负责启动、停止和重新启动脚本。
如果你谷歌搜索“Ubuntu 创建 systemd 服务”,你会发现类似这样的网站https://www.shubhamdipt.com/blog/how-to-create-a-systemd-service-in-linux/告诉您如何创建服务。基本步骤如下:
cd /etc/systemd/system
创建一个名为的文件your-service.service
并包含以下内容:
[Unit]
Description=<description about this service>
[Service]
User=<user e.g. root>
WorkingDirectory=<directory_of_script e.g. /root>
ExecStart=<script which needs to be executed>
Restart=always
[Install]
WantedBy=multi-user.target
然后重新加载服务守护进程,以便您的服务可以被识别systemd
:
sudo systemctl daemon-reload
并启动你的服务:
sudo systemctl start your-service.service
每次崩溃时重新启动的服务的完整示例如下:如何自动重启一个进程(wso2am)?
主要的技巧是包含以下几行:
ExecRestart=/bin/sh -c 'name-of-script restart'
Restart=always
RestartSec=2
您可以使用该restart
参数在实际重新启动之前清理或备份某些文件,但您不需要这样做。