サーバー起動時にスクリプトの実行

備忘録として

Linux(Rasbian)起動時にスクリプトの実行をさせるには(知る限り)2通りある

1. /etc/rc.local への書き込み

書き込みにroot権限が必要となる。
実行もrootになる。
そのため、スクリプトがログを書き出すものなら、ログもroot所有になってしまう。

2. crontabへの書き込み

cronは個々のユーザの権限で動作するので書き込み権限の心配はいらない。
そして、今までcronは定期実行用とおもってたら起動時指定もできるようである。

システム起動時に特定のコマンドを実行するには − @IT

@reboot 実行スクリプト
で動作する。
他のweekly, monthly などの記述も可読性があがっていい

P.S 1 要ネットワーク確立待ち

スクリプトがネットワークを介するものなら確立までに時間を要するので
@reboot sleep 5 && bash run_at_startup.sh startup.log
とかとするとよい。

P.S 2 pyenv.python@cron

pyenvのpythonで動くスクリプトをcronで動作させるためには
@reboot cd /home/pi/Programs/BootRun && /home/pi/.pyenv/versions/2.7.10/bin/python startup.py
と、ディレクトリに移動し、バージョン指定して実行する必要がある。

以下2つの組み合わせでもやってみたが唯一このパターンでしか動かなかった。

  • @reboot /home/pi/.pyenv/versions/2.7.10/bin/python /home/pi/Programs/BootRun/start.py
  • @reboot cd /home/pi/Programs/BootRun && python startup.py