毎日cron
ジョブをセットアップしてサーバーをシャットダウンしようとしています。
あるソースは/etc/crontab
の編集を提案しています
別の提案はcrontab -e
(with Sudo
)
後者を試しましたが、プロセスが実行されませんでした(思い出すと、30 23 * * * shutdown -h
でした)
また、nanoエディターでは、.tmp
ファイルで作業していたことにも注意してください。 (nanoのトップは言う:/tmp/crontab.9zeTNt/crontab
)
何が起こっている?どうすれば修正できますか?
crontab -e
:
ユーザーごとに使用可能。編集のために呼び出し側ユーザーのcron
テーブルを開き(/tmp/
の一時ファイル、たとえば/tmp/crontab.<RANDOM>/crontab
、これまで見てきたように)、コンテンツを保存すると、健全性チェックが行われます。渡された場合、ファイルは/var/spool/cron/crontabs/
、つまりcron
スプールディレクトリに移動され、呼び出し元のユーザーの名前と同じファイル名で保存されます。 cron
テーブルは呼び出し元のユーザー名用に保存されているため(例:/var/spool/cron/crontabs/foobar
、ユーザー名foobar
と仮定);すべてのcron
ジョブはそのユーザーとして実行されるため、ユーザー名フィールドは不要です。ここの各エントリには6つのフィールドが必要です(これらは既に推測しています)
/etc/crontab
:
これはシステムcron
テーブル(crontab
ファイル)です。スーパーユーザーのみがこのファイルを編集できるため、ここでユーザーを呼び出すという概念はありません。このファイルには7つのフィールドが必要です。タブ区切りの6番目のフィールド。これは、/etc/cron.d/
内のすべてのcron
ファイルにも当てはまります。 crontab -e
とのもう1つの違いは、エディターまたはI/Oを実行できるプログラム/シェルへの引数としてファイルを開く必要があるのに対し、crontab -e
ではファイルが上記のエディターで開かれることです。 VISUAL
またはEDITOR
または/usr/bin/editor
-最初のものが勝ちます。
コマンドがcron
:内で失敗した理由
shutdown
はスーパーユーザーまたは有能なユーザーとしてのみ実行でき、呼び出しユーザーはおそらくそのカテゴリーに分類されないためです。 root
のcrontab
にSudo crontab -e
で配置するか、/etc/crontab
に配置できます。通常、個々のユーザーテーブルを常に使用します。
注:
また、cron
はデフォルトで最小のPATH
を使用し、Shell
はsh
(Ubuntuではdash
)として設定されます。これら2つはよくあるcron
落とし穴です。
デバッグ中は、常にsyslog
を確認し、関連するコマンドのSTDOUTおよびSTDERRを後で分析するためにファイルにリダイレクトします。
/etc/crontab
を編集するときは、グローバルcrontabを編集しています
crontab -e
を介して編集する場合、ローカルの個人的なものを編集しています。エディターは一時ファイルで起動されるため、ファイルを実際の場所に書き込む前にチェックできます。
編集して保存し、エディターを終了したとき(filecheckとcopy-overを実行するにはプロセスを終了する必要があります)、「新しいcrontabがインストールされました」というメッセージが表示されたことを確認する必要があります