2017-06-24 11 views
1

rebootコマンドでマシンを再起動するはずのスクリプトをルートcrontabに設定しました。crontabでスクリプトを実行中 - reboot:コマンドが見つかりません

rebootがルートユーザーのパスにあるにもかかわらず、reboot: command not foundが表示されています。

$ sudo su 
$ which reboot 
/sbin/reboot 
$ echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin 

マイスクリプト:

#!/bin/bash 

ping 8.8.8.8 -c 1 > /dev/null 2>&1; exit_code=$? 
time_stamp=$(date +"%Y%m%d-%H%M") 

if [ $exit_code -ne 0 ]; then 
    (1>&2 echo "$time_stamp: failed with exit code $exit_code; restarting now") 
    reboot 
else 
    echo "$time_stamp: ok" 
fi 

rootユーザーのcrontab:

$ sudo crontab -l 
58 * * * * /home/pi/github/ping-restart/ping-restart.sh >> /home/pi/github/ping-restart/cron.log 2>&1 
$ sudo su 
58 * * * * /home/pi/github/ping-restart/ping-restart.sh >> /home/pi/github/ping-restart/cron.log 2>&1 

...はい、これは一時的な回避策whilですeインターネットがなぜ落ち続けるのかを考えます。

+0

多分、絶対パス '/ sbin/reboot'を試してみてください... –

+0

@ l'L'lこれはうまくいくようです。 crontabで 'reboot'コマンドを実行したスクリプトには出力がありませんが、'/sbin/reboot'には '/ sbin/reboot'が出力されています。なぜ 'reboot'それ自体では動作しないのでしょうか? – ning

+0

'cron'はrebootコマンドのどこに手がかりがないので、場所を指定する必要があります。 'cron'では特定のコマンドだけが名前を使って呼び出すことができるので、絶対パスを与える必要があります。 –

答えて

3

非常に基本的な環境設定で実行されるcronジョブ。とりわけ、デフォルトのPATHは/usr/bin:/binです。それはではないユーザーの通常のシェルセットアップを使用します。これを解決する方法はいくつかあります。

  • スクリプト内のフルパス(例:/sbin/reboot)を使用してください。
  • reboot(つまりPATH=/usr/bin:/bin:/usr/sbin:/sbin)を使用する前に、スクリプトでPATHを設定します。
  • スクリプトのエントリの前にcrontabにPATHを設定します(構文はスクリプトと同じです)。
+0

これは何が起こっているか100%と思われます。それを確認し、 'echo $ PATH> cron_path_log'をジョブとして設定します。 – ning

関連する問題