Mavericksで実行されないCronスクリプト


12

ユーザーcrontabファイルを次のように構成しました。

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

しかし、実行されません。私は10〜15分待ちました。どうして?

コマンドauto-update.shは、手動で実行すると簡単に実行されます。実行チェーンを分解して、cronからスクリプトを実行するにはどうすればよいですか?


1
どのOSを実行していますか?CronはOS Xでは非推奨になっているため、デーモンを起動する必要があるかもしれません。
bmike

最新、10.9.2。どうすればいいのですか?たとえば、スクリプトを1時間ごとに動作させたいだけです。上記のスクリプトでは、機能しなかったため必死で、2分ごとに機能するように修正しました。
RomaValcer

1
crontabファイルが存在する場合は、cronデーモンを自動的に開始する必要があります(代わりにlaunchdを使用)。/System/Library/LaunchDaemons/com.vix.cron.plist(特にthe KeepAliveおよびQueueDirectoriesitems)を参照してください。
ゴードンデイヴィソン

OK、キープライブはありますが、そこにリストされているパスのみが存在しない '/ etc / crontab'です。QueueDirectoriesでは、制限されたフォルダー「/ usr / lib / cron / tabs」に既存のファイルがあります。suとvimで開くとき、私の仕事があります。
RomaValcer 14年

回答:


17

cronジョブが実行される環境は、対話型シェルとはかなり異なります。スクリプトが実行されている可能性がありますが、正常に実行されていません。最大の違いの1つは、cronジョブの場合、デフォルトのPATHが「/ usr / bin:/ bin」であるため、/ usr / binまたは/ binにないコマンドを使用すると、スクリプトが独自のPATHを設定するか、コマンドへの明示的なパスを提供しない限り、見つかりました。もう1つの大きな違いは、単純に対話型セッションに接続されていないことです。したがって、対話型(端末からの読み取りなど)を実行しようとしても失敗します。cronエントリを次のように変更してみてください。

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

...そして、ログに有益な情報が表示されるかどうかを確認します。


これは私の努力よりも優れています-あなたの答えがより良くなるなら、私のロガーのアイデアを自由に取り入れてください。
bmike

ログが表示されませんでした。
RomaValcer

@RomaValcer:それは奇妙です。つまり、スクリプトを起動することさえできていないということです。実行してps -ax | grep [c]ron、実行中のcronデーモン(/ usr / sbin / cron)がリストされているかどうかを確認します。その場合は、bmikeのロガーテストを試してください。いずれの場合でも、ログ(/var/log/system.logおよびコンソールユーティリティの「すべてのメッセージ」項目)を確認し、関連性のあるものがあるかどうかを確認します。
ゴードンデイヴィソン14年

うん、そこにあります。ただし、ログには、スケジュールされた時間に開始されるものは表示されません。
RomaValcer 14年

4

伝えるのは難しいですが、5分ごとに実行する2番目のcronジョブを追加し、メッセージをsystem.logに記録するシステム構築ツールを呼び出すとどうなりますか?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

そうすれば、問題のユーザーに対してcronが実行されていることがわかり、cronの開始または限られたcron環境で実行されるようにスクリプトを修正することに集中できます。(あなたは壁時計を見て、すぐに来ている数回を選ぶか、次の数分さえ選ぶことができます-例えば、cronファイルを実行して保存するために35,36,37,38を入れる12:34に編集)


4

この質問をするのは久しぶりですが、このスレッドでは解決策が出てこなかったようです。

ユーザーcrontabの作成方法によっては、編集後にこれを実行する必要がある場合があります。

crontab ~/.yourcrontabfile

新しいcrontabが(変更後も)アクティブ化されているかどうかを確認するには、次を確認します。

crontab -l

それは機能しません。Crontab -lは、cronがセットアップされていることを示しますが、それでも動作しません。
PKHunter

1

同じ問題がありました。パスをbashスクリプトに追加する必要があります。

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin

0

同じ問題がありました。crontabファイルに仕事の後に改行を追加すると消えました(合計crontab n00bなので、この動作が広く知られているかどうかはわかりません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.