web-dev-qa-db-ja.com

cronジョブ-「/ etc / crontab」と「crontab -e」の編集の違い

毎日cronジョブをセットアップしてサーバーをシャットダウンしようとしています。

あるソースは/etc/crontabの編集を提案しています

別の提案はcrontab -e(with Sudo

後者を試しましたが、プロセスが実行されませんでした(思い出すと、30 23 * * * shutdown -hでした)

また、nanoエディターでは、.tmpファイルで作業していたことにも注意してください。 (nanoのトップは言う:/tmp/crontab.9zeTNt/crontab

何が起こっている?どうすれば修正できますか?

1
ABC123

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はスーパーユーザーまたは有能なユーザーとしてのみ実行でき、呼び出しユーザーはおそらくそのカテゴリーに分類されないためです。 rootcrontabSudo crontab -eで配置するか、/etc/crontabに配置できます。通常、個々のユーザーテーブルを常に使用します。

注:

また、cronはデフォルトで最小のPATHを使用し、Shellsh(Ubuntuではdash)として設定されます。これら2つはよくあるcron落とし穴です。

デバッグ中は、常にsyslogを確認し、関連するコマンドのSTDOUTおよびSTDERRを後で分析するためにファイルにリダイレクトします。

1
heemayl

/etc/crontabを編集するときは、グローバルcrontabを編集しています

crontab -eを介して編集する場合、ローカルの個人的なものを編集しています。エディターは一時ファイルで起動されるため、ファイルを実際の場所に書き込む前にチェックできます。

編集して保存し、エディターを終了したとき(filecheckとcopy-overを実行するにはプロセスを終了する必要があります)、「新しいcrontabがインストールされました」というメッセージが表示されたことを確認する必要があります

0
taifwa