web-dev-qa-db-ja.com

Crontabジョブは@reboot後+1分で開始します

+1分の再起動ごとに実行されるスクリプトが必要です。レコードを配置しました@rebootですが、私のスクリプトでは早すぎます。再起動後にいつ実行するのですか?

52
Yurij73

スクリプトは起動後1分間だけ実行することを意図したものですか、それとも他の時間にも使用できますか?前者の場合、sleep 60をスクリプトの先頭に、または後者の場合は、それをcrontabファイルに追加します。

@reboot sleep 60 && my_script.sh

Sr_で指摘されているように、おそらくこれは間違った方法で取り組んでいるため、適切なinit.dまたはrc.dスクリプトがより堅牢なソリューションになります。

76
D_Bye

たとえば、ネットワークが利用可能になったときに再起動後に何かを実行する必要がある場合、必要なときに実行されるsystemdユニットを書き込むことができます(もちろん、これはsystemdを備えたシステムでのみ機能します)。

これを行うには、次の内容でファイル/etc/systemd/system/my_script.serviceを作成します。

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

次に実行します:

Sudo systemctl daemon-reload
Sudo systemctl enable my_script

完了です!

16
Envek

atを使用します。のように:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

...追加の警告を追加して、本当に必要なのが他のすべての後に実行する場合は、OSが使用しているinitでそれを実行する方法を確認する必要があります。

12
clacke