我正在使用亚马逊Linux。我有一个用 bash 编写的启动和停止服务的脚本,位于
/etc/init.d/wildfly
例如,在各种运行级别,我有符号链接来确保脚本启动和停止
/etc/rc.d/rc3.d/S80wildfly
/etc/rc.d/rc2.d/S80wildfly
但我的问题是,我需要做什么才能确保服务出现故障时能够自动重新启动?我在 CentOS 上读到,您可以使用指令创建一个文件(例如“wildfly.service”)
Restart=always
RestartSec=3
Amazon Linux 上的等效指令位于何处?
答案1
亚马逊Linux 2
如果您的 Amazon Linux 版本 >=2.0,则默认具有 systemd。在这种情况下,您应该能够使用在 CentOS 上使用的相同单元文件以及重新启动指令。
亚马逊 Linux AMI
如果您正在运行 Amazon Linux AMI,则需要使用单独的管理程序来监控您的进程(如 poige 提到的),或使用 /etc/inittab。
例如,为了让 sysvinit 自动重新启动进程,请将以下内容添加到 /etc/inittab 中:
# Start and respawn process
mydaemon:2345:respawn:/path/to/executable argument1 argument2
这告诉 sysvinit 在运行级别 2、3、4 和 5 上启动进程,并在终止时重新启动它。
此外,如果您希望在启动时运行的可执行文件周围添加一些命令,则可执行文件路径可以引用在前台运行程序的脚本。
答案2
我正在使用亚马逊Linux。
好的,输入man init
如果它有任何新鲜感,你就会发现它systemd
确实如此。所以你的 qn 就变成了已经回答了一些问题。
如果您认为systemd
过度设计(事实上我们很多人都这样做),您可以尝试使用古老的守护进程工具或类似工具(runit、supervisord)。但请做好准备,它可能不在 Amazon Linux 附带的标准存储库中。