man 5 crontab
crontabを使用して起動時にスクリプトを実行する方法についてはかなり明確です:
These special time specification "nicknames" are supported, which replace the 5 initial time and date
fields, and are prefixed by the `@` character:
@reboot : Run once after reboot.
そこで、crontabに(rootではなくユーザーアカウントで)1行追加しました:
@reboot /home/me/myscript.sh
ただし、何らかの理由で、myscript.shはマシンの再起動時に実行されませんでした。
(コマンドラインから呼び出すと正常に実行されるため、権限の問題ではありません)
何が足りないのですか?
@Anthonの質問に答えるために更新してください:
- Oracle-linuxバージョン:5.8(uname:2.6.32-300.39.2.el5uek#1 SMP)
- cronバージョン:vixie-cron-4.1-81.el5.x86_64
- はい、
/home
は マウントされたパーティション。これが問題のようです。これを回避するにはどうすればよいですか? - 現在、
myscript.sh
/home/me
内のファイルにのみテキストメッセージをエコーします 。
承認された回答:
cronにはさまざまな実装があるため、これは少し紛らわしいトピックになる可能性があります。また、この機能を壊したいくつかのバグがあり、特にシャットダウン/起動と再起動を行った場合に、単に機能しないユースケースもいくつかあります。
バグ
データポイント#1
Debianでのそのようなバグの1つは、次のタイトルでカバーされています:cron:@rebootジョブは実行されません。これはUbuntuにも浸透しているようですが、直接確認することはできません。
データポイント#2
Ubuntuのバグの証拠は、このSO Q&Aのタイトルで確認されているようです:@rebootcronjobが実行されていません。
抜粋
コメント#1:…。 3)お使いのバージョンのcrondは@rebootをサポートしていない可能性があります。vixのcrondを使用していますか? …crontab-l-uユーザーの結果を表示する
コメント#2:…特定のバージョンのcronの@rebootに依存するのではなく、initスクリプトとして設定することをお勧めします。
コメント#3:…@ MarkRobertsは再起動を削除し、1 * * **を*/1 * * * *に変更しました。問題は解決しました!担当者マークはどこに送ればよいですか?ありがとうございます!
そのQ&Aで受け入れられた回答にも次のコメントがありました:
Lubuntuは@RebootCron構文をサポートしていないようです。
追加の証拠
データポイント#3
追加の証拠として、誰かがまったく同じことを試みていて、それが機能しないことに不満を感じているというこのスレッドがありました。タイトルは次のとおりです。スレッド:Cron –@rebootジョブが機能していません。
抜粋
Re:Cron –@rebootジョブが機能していません
引用元の投稿ceallred投稿を表示
これは私を殺しています…ラッパースクリプトを試しました。手動で実行するとログファイルが生成されます…再起動すると、ジョブは実行されないか、ログファイルが作成されません。Syslogは、CRONがジョブを実行したことを示しています…しかし、出力がなく、プロセスが実行されていません。
Jul 15 20:07:45 RavenWing cron [1026]:(CRON)INFO(@rebootジョブの実行)
Jul 15 20:07:45 RavenWing CRON [1053] :( ceallred)CMD(/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2>&1&)cronは@rebootコマンドが気に入らないようです…。他に何かアイデアはありますか?
わかりました…部分的に解決しました。これを解決済みとしてマークし、新しい問題で新しいスレッドを開始します…..
答えは、CRONがスクリプト(/ home / username / scriptsに格納されている)を実行しようとしたときに、暗号化されたホームディレクトリがマウントされなかったということだと思います。 / usr / scriptsに移動すると、ジョブは期待どおりに実行されます。
だから今、それはスパイダーオークの問題のようです。プロセスは開始されますが、ブートプロセスが終了するまでに、プロセスは終了します。なんらかの理由でクラッシュを推測しています…。それについて尋ねる新しいスレッド。
すべての助けに感謝します!
上記のユーザーが自分の問題を理解すると、@reboot
を取得できました。 ユーザーのcrontabエントリを処理します。
Ubuntuで使用されているcronのバージョンは完全にはわかりませんが、これはユーザーが@reboot
を使用できることを示しているようです。 また、このバグはcronの後続バージョンのある時点で修正されました。
データポイント#4
次のCentOS6でテストしましたが、機能しました。
例
$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1
次に、システムを再起動しました。
$ sudo reboot
再起動後。
$ cat reboot.txt
hi
持ち帰り
- この機能は、システムとユーザーの両方のcrontabエントリでサポートされているようです。
- 特定のディストリビューションやcronパッケージのバージョンでサポート/動作していることを確認する必要があります。
@reboot
で実際のメカニズムがどのように機能するかについての詳細 私は内臓について論じているこのブログ投稿に出くわしました。タイトルは「@reboot–簡単なcronマジックの説明」です。
crondのデバッグ
crond
の冗長性を上げることができます RHEL / CentOS/Fedoraベースのディストリビューションのこの構成ファイルに以下を追加します。
$ more crond
# Settings for the CRON daemon.
# CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS="-L 2"
有効なレベルは0、1、または2です。このファイルをデフォルトのログレベルに戻すには、"-L 2"
を削除するだけです。 状況のデバッグが完了したら。