当应用程序崩溃时重新启动它

当应用程序崩溃时重新启动它

我声明我几乎一无所知,我找到了一些可以解决我的情况的解决方案,但它并不完全符合我的期望。实际上,我想创建一个脚本,当启动始终保持对程序的主动监听时,如果程序自行关闭,它必须重新打开它。我发现了类似这样的内容:

 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参数在实际重新启动之前清理或备份某些文件,但您不需要这样做。

相关内容