實現了一個程式,需要在ubuntu上跑起來。能開機自啟,且崩潰了也能自己重啟。有兩種實現方式,個人推薦第二種。
直接將要啟動程式的執行命令加在 /etc/rc.local 中,開機時會執行這裡的命令。
我使用時:寫了一個指令碼DDR_Guard.sh,在指令碼裡面迴圈判斷程式有沒有開啟。如果沒有開啟,則呼叫相應的啟動指令。
比如:
1)此方式在Ubuntu20.04之後就取消了,只在Ubuntu16.04中測試可行。
2)在 /etc/rc.local 中的命令一定要可以結束,如果結束不了會導致系統開不起來。所以我用了後臺執行:也就是nohup。
採用systemctl的方式,好像很挺方便的樣子。(實際用時把youngtest換成自己需要的名字即可)
強烈建議看看這個檔案,裡面介紹了一些引數的具體含義:https://ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
1)為了測試,我寫了一個程式test0726,裡面迴圈往一個檔案裡面輸入一句話。
2)還寫了一個指令碼:youngtest.sh
#!/bin/bash cd /home/dadao/workspace/test/systemctltestLog v_time=`date "+%Y_%m_%d_%H_%M_%S"` echo $v_time" Start runing ++++++++++++++++++++ " >> youngtestsh.log ./test0726 echo $v_time" Process quit ---------------------- " >> youngtestsh.log
3)需要有執行許可權:chmod +x youngtest.sh test0726
1)編寫一個 youngtest.service,內容如下:
[Unit] Description=test [Service] Type=simple User=dadao ExecStart=/home/dadao/workspace/test/systemctltestLog/youngtest.sh Restart=always RestartSec=30 StartLimitInterval=0 [Install] WantedBy=multi-user.target graphical.target
以下引數根據實際需要進行設定:
User:表示以哪個使用者啟動,不寫預設是root。
ExecStart:就是要執行的語句。
Restart=always: 只要不是通過systemctl stop來停止服務,任何情況下都必須要重啟服務,預設值為no。還可以設定有條件重啟,具體參考上述檔案。
RestartSec=5: 重啟間隔,比如某次異常後,等待5(s)再進行啟動,預設值0.1(s)
StartLimitInterval: 無限次重啟,預設是10秒內如果重啟超過5次則不再重啟,設定為0表示不限次數重啟
2)拷貝到: /lib/systemd/system 可能還要注意許可權問題。
3)修改組態檔後需要過載入設定:
sudo systemctl daemon-reload
4)設定開機自啟:
sudo systemctl enable youngtest.service
之後就可以直接重啟了。
5)之後就可以操作了:
啟動:
sudo systemctl start youngtest.service
停止:
sudo systemctl stop youngtest.service
檢視狀態:
sudo systemctl status youngtest.service
測試自動重啟功能: