Linux

程序退出後自動重啟

  • April 22, 2022

我有一個在 nodejs 上執行的 javascript 程序。如果我執行以下命令:

node app.js

它繼續執行,但有時會退出。但是我想在它退出時自動重新啟動它。

對於 Linux 系統,是否有任何命令可以這樣做?請注意,我不想使用 cron 作業。

**快速而骯髒的方式:**如果使用 bash,那麼一個簡單的 bash 腳本怎麼樣:

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

順便說一句,這是錯誤的做法,因為您沒有考慮任務退出的原因,並且可能有很好的理由重新啟動它。不是說它也可能在啟動時崩潰,被 oomkilled…


**在系統化的 linux 下更規範的方式:(**建議作為 @Kusulananda 說明的一部分,並受The Ultimate Guide to deploy your node app on Linux 的啟發):

假設 app.js 以 #!/usr/bin/env 節點聲明開頭,並且設置了 app.js x 文件模式位,

設計一個新服務:如果需要,在 /etc/systemd/system 目錄中創建一個 .service 文件,如果您的使用者只需要,則在 ~/.config/systemd/user 目錄中創建一個文件,如下所示:

[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

引用自:https://unix.stackexchange.com/questions/699887