web-dev-qa-db-ja.com

Crontabエントリが機能しない

これはcrontabにあります(/ etc内)

ルートとしてファイルを編集しました。

スタンドアロンで実行するとスクリプトは正常に機能しますが、crontabでは機能しません。

@daily          root    /home/andy/bin/Backup_18_04.sh
1
fixit7

Crontabのスクリプトに問題があるかどうかを判断するには、次のコマンドを使用してシステムログを確認する必要があります

less -S /var/log/syslog

cRON行を探し、関連するエラーメッセージを探します。

この分析を簡略化する別の方法は、次のようにcron定義に明示的なログファイルを追加することです。

@daily root /home/andy/bin/Backup_18_04.sh >/home/andy/backup.log 2>&1

>記号はスクリプトのすべての出力をファイルにリダイレクトし、2>&1はすべてのエラーメッセージを同じリダイレクト済み出力ファイルにリダイレクトします(1はデフォルトですべてのプログラムが通常のメッセージを送信する内部記述子で、2は同じです。エラーのため、2>&1は 'channel' 2を 'channel'のコピーに接続します1)。重要:行定義は改行で終了する必要があります。

私はcrontab -eで構成された通常のCRONシステムを使用することを好みます。柔軟性が高いので、複雑に見えるだけです。たとえば、次のコマンドを使用して、毎日午前3時25分にスクリプトを実行できます。

#MINUTE HOUR DAYOFMONTH MONTH DAYOFWEEK COMMAND
 25     3    *          *     *         /home/andy/bin/Backup_18_04.sh >/home/andy/backup.log 2>&1

アスタリスクは各フィールドの「すべて」を意味するため、「すべての月のすべての曜日の3時25分」のcronはスクリプトを実行し、通常のエラーメッセージがあればファイルに保存します/home/andy/backup.log

使用していた単語@dailyは、毎日午前0:00に0 0 * * *に相当します。

さらに、時間表示後のユーザー名は/ etc/crontabでのみ使用され、crontab -eで作成されたスクリプトでは使用されません(ユーザーはデフォルトで作成者であるため)。

他の2つの重要な側面は、スクリプトを実行可能ファイルとして宣言し、どのシェルインタープリターがそれを処理するかを示すことです。次のコマンドを使用すると、スクリプトを実行可能にするのは簡単です。

chmod a+x /home/andy/Backup_18_04.sh

シェルインタープリターを示すには、スクリプトの最初の行に記号のポンド/感嘆符#!と必要なシェルパス(これは 'Shebang'と呼ばれます)が含まれている必要があります。次に例を示します。

 #!/bin/bash

これにより、スクリプトがBash Shellインタープリターで処理されます。

Crontab行形式の詳細については、次のコマンドを使用して対応するマニュアルを参照してください。

man 5 crontab
2
Fjor