2017-01-13 10 views
0

私はコマンドラインからうまく動作するbashスクリプトを持っています。 rootユーザーのcrontab(sudo crontab -e)に追加した後、実行されないことがわかります。ここでのcronタスクは次のとおりです。OSX bashスクリプトはcronから実行されません

ここ
0,15,30,45 * * * * /Users/lorenzot/Documents/scripts/restart-net.sh 

はスクリプトです:

#!/bin/bash 

echo "Net script" | logger -s >> /Library/Logs/netlog.log 

# Ping twice just to be sure 
/sbin/ping -c 2 8.8.8.8 
/sbin/ping -c 2 8.8.8.8 
if [ $? -ge 1 ]; then 
echo "Network down :(" 

ifconfig en1 down 
ifconfig en1 up 
      exit 1 
else 
    echo "Network up! :)" 
exit 0 
fi 

スクリプトはrootが所有し、もちろん、それは(766)、実行可能であり、それは正しいパスに存在しません。

ログファイルにエントリが表示されませんが、これがログファイルに書き込む正しい方法であるかどうかはわかりません。

syslog -s -k Facility com.apple.console \ 
       Level Error \ 
          Sender restartscript \ 
Message "Restart network script run" 

何もログに書き込まれません。それにもかかわらず、私は実行されたcronタスクのログエントリを見ることが予想されます。 アイデア ありがとう

+0

'root'のメールアカウントをチェックして、これらのジョブから任意の出力/エラーメッセージがあなたには、いくつかを見なければならない(そこに登場している、または他の何かが間違っている(または、あなたが私たちに言っていないかどうかを確認一部始終 ;-) ) )。 。うまくいけば、エラーメッセージが問題の内容を伝えます。がんばろう。 – shellter

+0

コマンドラインを '/Users/lorenzot/Documents/scripts/restart-net.sh 'に変更してください。 touch/tmp/cron_run.tmp'またはそれに類するものを使用して、実際にcronがタスクを開始したことを確認してください(または試行しました)。 – codeforester

+0

正直、それは全部の話です。私は他に何を教えていいのか分かりません。スクリプトとcronタスクが投稿されました。 – Lazloman

答えて

2

'logger -s`はメッセージのコピーをstdoutではなくstderrに送信します。また、stdinではなく、引数としてメッセージを渡すこともできます。これを試してみてください:

logger -s "Net script" 2>> /Library/Logs/netlog.log 
+0

これはそれでした!それは実際に走っていたようですが、出力が間違った場所に行きました。しかし、さらなる研究が行われると、アップルはcronの立ち上げを控えているようだ。 https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html launchdへの移行について調査します。 – Lazloman

+1

@ user675712 launchdは一般的にcronよりも好まれますが、cronは引き続きサポートされています。私はあなたがlaunchdに明確な利点を見せない限り、/に移行することについて心配しないでしょう。 –

関連する問題