进程退出后自动重新启动

进程退出后自动重新启动

我有一个javascript程序,它在nodejs上运行。如果我运行以下命令:

node app.js

它继续运行,但有时会退出。但我想在它退出时自动重新启动它。

Linux 系统有没有命令可以做到这一点?请注意,我不想使用 cron 作业。

答案1

快速而肮脏的方式:如果使用 bash 那么一个简单的 bash 脚本怎么样:

#!/usr/bin/bash
while true
do
  node app.js
done

顺便说一句,这是错误的行为,因为您没有考虑任务退出的原因,并且可能有很好的理由不是重新启动它。并不是说它也可能在启动时崩溃,被杀死……


在系统化的 linux 下更规范的方式:(建议作为@Kusalananda 注释的一部分,灵感来自在 Linux 上部署节点应用程序的终极指南):

假设 app.js 以#!/usr/bin/env node声明开头,并且文件 app.js 被标记为可执行,

设计新服务:/etc/systemd/system如果系统范围内需要,则在目录中创建一个 .service 文件~/.config/systemd/user,如果仅用户需要,则在目录中创建一个 .service 文件,如下所示:

[Unit]
Description=        #(Whatever String You Want)
After=              #(Any service that should be started before, ex. network.target)
[Service]
ExecStart=          #(Key in the absolute path of app.js)
Restart=always      #(This will ensure the automatic restart)
User=               #(TBD depending on your system & wishes)
Group=              #(TBD depending on your system & wishes)
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=   # (Absolute path of app.js working dir.)
[Install]
WantedBy=           # multi-user.target or default.target according to your needs

您现在应该可以启动它:systemctl --user start service_filename

相关内容