crontabで起動時にコマンドを実行する


24

リブートが完了した後、Linuxでコマンドを実行したかったのですが、crontabを使用して実行できることがわかりました。このコマンドを実行したかった

sudo ifdown eth0 && sudo ifup -v eth0

crontabで私はちょうどすることができます:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

または、スクリプトに保存する必要がありますか?

ありがとうございました


7
Crontabはeth0を再起動するための間違ったツールのようです。そのコマンドを(sudoなしで)/etc/rc.localに入れないのはなぜですか?
mikewhatever

何をする必要がありますか?これらのタスクは通常、ブートプロセス中に自動的に行われ、ほとんどされているNEVER自動化されたブートプロセスとは別に実行する必要はありません...
トーマス・ウォード

1
@mikewhatever私は現時点では賛成できないが、それを提案してくれてありがとう。
ロッティ

回答:


34

これが機能する前のいくつかの注意事項は次のとおりです。

  1. sudocronジョブで使用しないでください。代わりrootに、独自のcrontabの代わりにのcrontabを編集してから、sudo crontab -eなどのコマンドを入力しますsudo
  2. @mikewhateverが述べたように、これはの奇妙な使用法でありcron、おそらく行の/etc/rc.local前に配置する方が適切exit 0です。
  3. 探しているものを正確に伝えると、ログまたは設定オプションに誘導できる場合があります(起動時にネットワークサービスを再起動すると、少しハックが感じられます)。
  4. ほとんどのシステムで@rebootは、ハードシャットダウンまたはクラッシュの後に実行する必要がありますが、YMMVのように異なるcron実装があります。両方を主張するコメントをさまざまな場所で見ました。

編集(2016/02/17):絶対パスの誤った文句を削除しました。kudos @muru
EDIT(2016/10/17):シャットダウンノート
EDITを追加(2017/09/11):シャットダウンノートを改訂しました。それについては本当にわからない。


わかりやすくするためにetc/rc.local、sudo を使用せずに完全なコマンドを記述する必要があります。したがって、ifdown eth0 && sudo ifup -v eth0 exit 0
Lottie

cronPATH指定されたを使用/etc/environmentします/sbin
ムル

私は@mikewhateverが提案したことをしましたが、うまくいきました。ありがとう
ロッティ

1
@TheSchwaであるべきです。少なくとも12.04以降は/etc/pam.d/cronロードされるpam_envので、読み込む/etc/environment必要があり、デフォルトPATHセットが使用されます。その答えは、12.04が発表される直前に投稿されました。
ムル

2
@TheSchwa cronの再起動はコールドブートでは実行されないという記述は間違っています。crondデーモンの起動時に、リブートが実行される行、期間。それは、ウォームブート、コールドブート、またはブートがなく、crondを手動でシャットダウンして再起動したかどうかです。crondデーモンは、再起動の理由を認識または気にしません。再起動行を実行するたびに、単に再起動行を実行します。
カートフィッツナー

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