毎日のcronジョブが実行されていない


10

簡単な概要:ソースコードリポジトリを毎日SVNからその日のtarballにバックアップするスクリプトがあります。私はスクリプトをテストしましたが、出力ディレクトリの所有権のため、sudoとして実行する限り、スクリプトは非常にうまく機能します。

問題は、これを毎日実行したいということです。そのため、/ etc / cron.dailyディレクトリにリンクを配置します。ディレクトリの内容は次のとおりです。

thom@spenser:/etc/cron.daily$ ls -l
total 60
-rwxr-xr-x 1 root root   189 2011-09-14 02:21 apport
-rwxr-xr-x 1 root root 15535 2011-10-06 11:30 apt
-rwxr-xr-x 1 root root   314 2011-08-08 16:57 aptitude
lrwxrwxrwx 1 root root    24 2012-02-28 11:05 backup -> /usr/local/bin/backup.sh
-rwxr-xr-x 1 root root   502 2011-06-08 11:48 bsdmainutils
-rwxr-xr-x 1 root root   256 2011-10-06 04:04 dpkg
-rwxr-xr-x 1 root root   372 2011-10-04 16:50 logrotate
-rwxr-xr-x 1 root root  1353 2011-07-27 07:17 man-db
-rwxr-xr-x 1 root root   606 2011-08-17 09:16 mlocate
-rwxr-xr-x 1 root root   249 2011-06-24 05:36 passwd
-rwxr-xr-x 1 root root  2417 2011-07-01 17:25 popularity-contest
-rwxr-xr-x 1 root root   383 2011-09-30 15:09 samba
-rwxr-xr-x 1 root root  3594 2011-09-19 20:07 standard
thom@spenser:/etc/cron.daily$ 

問題は、単に実行されないことです。そのスクリプトの権限は次のとおりです。

thom@spenser:/etc/cron.daily$ ls -l /usr/local/bin/backup.sh 
-rwxr-xr-x 1 root root 260 2012-02-28 11:03 /usr/local/bin/backup.sh

アイデア?


2
可能な場合は、最良の回答を選択して(他にある場合)、その他の未解決の質問を閉じることを検討してください。サイトがあなたの問題を抱えている次の人のための効果的なツールになることができるように、私たちはユーザーに彼らの質問を維持することを必要とします。ベストプラクティスの詳細については、質問をすることに関するFAQを読むことを検討してください
Bruno Pereira

回答:


37

これを試しました

run-parts --test /etc/cron.daily

ファイルupdate.ubuntuが起動しないことがわかりました。また、ファイルに拡張子が付いていることにも気づきました(ドットが含まれています)。

これを修正する手順。

  1. update.ubuntuupdate-ubuntuに名前変更
  2. さてrun-parts --test /etc/cron.daily、今回は私のファイルが登場しました!

1
ええ、これで解決しました。ファイル名のドットが好きではないので、ファイル名をmyscript.shからmyscriptに変更するとうまくいきました。
マットパーキンス2013年

3
これはもっと高くする必要があります。スクリプトを従来の「backup.sh」として保存しました。「.sh」部分を削除することで解決しました。トンありがとう!
デビッド

ありがとう!毎日のcronから.shファイルを暗黙的に削除することにした男/ギャルは恥ずかしいはずです!
シルヴァン

公然とむち打たれるべきだ!;-)この決定のために人々が集合してどれだけの時間を失ったのかと思います...それには正当な理由があったのだろうか?
xastor 2017

3

いくつかのことが考えられます。

ルーツパス:

実行するコマンドによっては、crontabファイルの先頭に次の行を追加して、rootユーザーのPATH変数を展開する必要がある場合があります。

PATH = / usr / sbin:/ usr / bin:/ sbin:/ bin

src:https : //help.ubuntu.com/community/CronHowto

または、スクリプトの各コマンドへのフルパスを使用します。たとえば、/bin/ls代わりにls。(which lsパスのコマンドライン)。

ここで報告されるファイル名のドットに関する奇妙なバグがあります。リンクしているファイルに拡張される可能性がありますが、これはありそうにありません。

バックアップファイルの出力を保存していますか?最初の行に次のようなものを入れて、それがまったく実行されていないか、実行されているがどこかで失敗しているかどうかを判断できるようにします。

/bin/echo "Attempting to run backup" >> /path-to-home/backup.log

または、スクリプトをcrontabファイルに直接追加してみてください。

sudo -i
crontab -e
[add the next line to the file, then save and exit]
33 15 * * * /usr/local/bin/backup.sh

マシンがオンの場合、毎日15:30に実行されます。テスト中に* * * * *を使用して、動作するまで1分に1回実行します。


1
スクリプトで絶対パスを使用することはお勧めしません。PATHがわからない場合は、スクリプトで自分で設定してください。crontabが機能しない理由を
geirha

役立つリンク、ありがとう。フルパスを使用しない理由は、移植性です。けっこうだ。別の合理的な解決策は、スクリプトの開始時に使用しているコマンドを他の構成とともに定義することです。LS= / bin / ls; SRC_DIR = / home / joe / src。次に、$ LS $ SRC_DIRを使用します。定義されたすべてを上部および1か所に保持します。
Sean

私は読みやすさを減らすためにそれを見つけます、そしてあなたはそれが実行されるべきであるすべての新しいシステムのためにすべてのCOMMAND = / path / to / commandを調べる必要があります。あるシステムでは、必要なコマンドはすべて/ usr / binにあり、別のシステムでは/ binにあり、その他のコマンドは/ usr / binにあります。/ usr / binと/ binの両方をPATHに含めるだけで問題ありません。余談ですが、変数名は小文字にする必要があります。そうしないと、特別なシェル変数や環境変数が上書きされる危険があります。
ゲイラ

re:大文字の変数名。私はそれをやっているのを見た最初のスクリプトのために、私はいつもそれをあまり考えずにやってきました。しかし、あなたは正しいです、上向きと下落の可能性はありません。これを指摘してくれて、今この習慣を破ってくれてありがとう。
Sean

1

次のようなメッセージのsyslogを作成します。

crond: (*system*) BAD FILE MODE

ファイルを644に制限する(十分である)必要があります。

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