我有一个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