2014-10-31 17 views
1

我有幾個必須設置的Linux設備。一旦建立起來,他們會在一個偏遠的地方,我無法讓他們回來。我正在使用樹莓派。這些設備將運行幾個腳本,必須無限期地工作數月或數年。 那些設備上運行的腳本:在Linux上無限期運行腳本的最可靠的方法

  • 的Python
  • 擊(autossh)

什麼我迄今所做的:

cron作業

當設備啓動時,會啓動一個bash腳本:

@reboot sudo bash /home/user/Python/Python_bash_1.sh 

有在bash腳本檢查,如果Python腳本運行:

#!/bin/bash 
until python3 /home/user/Python/program_1.py; do 
    echo "'program_1.py' exit code $?. Program restarting.." >&2 
    sleep 1 
done 

rc.local中

另一種選擇是使用rc.local中:

#SSH auto connection 
autossh -M 10001 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /root/.ssh/rsa_rasp_dev_1 -R 6001:localhost:22 [email protected]_ip_address -p 22 & 
exit 0 

使用-f選項和&符號(&)可以很好地工作。

經過一週的測試和幾次重啓之後,它看起來很可靠,但我不知道它是否會持續數月或數年。

我的問題是:

什麼是啓動一個bash的crontab和rc.local中的最佳方式是什麼? 有沒有其他的方法來檢查腳本是否正在運行,如果不是,則重新啓動?

謝謝,

+0

您是否需要升級這些腳本/程序? – 2014-10-31 11:30:59

+0

嗨巴西爾。是的,這就是我使用autossh的原因。我需要能夠連接到設備。 – Yoan 2014-10-31 11:31:58

+0

某人寫了一個名爲** supervisord **的守護進程。用法示例:http://stackoverflow.com/questions/26071268/how-to-keep-a-script-running-all-the-time-in-linux/26072493#26072493 – Paul 2014-10-31 11:35:16

回答

1

有特殊的工具,照顧。

  1. 現代的init系統,如暴發戶或systemd有這個捆綁:你剛纔定義的服務應該在失敗
  2. 的情況下,重新啓動在舊系統上可以使用的軟件的定製片如daemontoolssupervisord