web-dev-qa-db-ja.com

起動時にスクリプトを実行し、その後30分ごとに実行する方法

Pythonスクリプトを実行する必要があるUbuntu Serverマシンがあります。

  • 起動時、その後30分ごと
  • root権限付き
  • ログインせずに

インターネットで検索したところ、Sudo crontab -e cron設定を編集して、次のような行を追加します。

 30 * * * * python3 /myScriptPath/myScriptName.py

私が見つけられなかったのは、スクリプトを実行する必要があることをcronに伝える方法ですブート時、その後30分ごとおよび"hh:30"時間ごとではありません

また、スクリプトはどこに保存すればよいですか?

1
Ntakwetet

制御ファイルを作成して/etc/cron.d/myscriptrunに配置します

Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    /usr/local/bin/myscript.sh

このファイルを実行可能にしないでください。スクリプトではなく制御ファイルです。


Bashスクリプトを作成し、/usr/local/bin/myscript.shに配置します

#!/bin/bash

while true ; do

    python3 /myScriptPath/myScriptName.py &
    sleep 30m

done

実行可能ファイルchmod a+x /etc/cron.d/bashscriptにします。

&はジョブをバックグラウンドで開始するため、スクリプトは正確に30分間スリープします。 &を削除すると、ジョブが終了してから30分後にスクリプトがスリープ状態になります。意味のあるジョブは30分間隔で開始されなくなりました。


Cronがジョブを実行します

スクリプトを起動する必要はありません。cronは起動時に自動的に起動します。ステータスの使用を監視するには:

$ systemctl status cron*
● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-11-12 06:01:27 MST; 1 weeks 6 days ago
     Docs: man:cron(8)
 Main PID: 1115 (cron)
   CGroup: /system.slice/cron.service
           ├─1115 /usr/sbin/cron -f
           ├─1132 /usr/sbin/CRON -f
           ├─1138 /bin/sh -c    /usr/local/bin/eyesome.sh
           ├─1142 /bin/bash /usr/local/bin/eyesome.sh
           ├─1160 /bin/bash /usr/local/bin/eyesome-dbus.sh
           ├─1168 dbus-monitor --system type=method_call, interface=org.freedesktop.ColorManag
           ├─1169 /bin/bash /usr/local/bin/eyesome-dbus.sh
           └─6575 sleep 57207

ディスプレイの上部にcronがあり、下部にsleepがありますが、中央にeyesomeがありません。ただし、その日の出/日没のマルチモニターの明るさ/ガンマ遷移ソフトウェア。

pythonジョブが次の30分間隔で実行されるタイミングを確認するには、sleepコマンドのプロセスID(上記の例では6575)で問い合わせを実行します):

$ remaining_sleep_time 6575
55923

$ echo $((55923/60))
932

残り時間は、ジョブがウェイクアップする前の55923秒を60秒で割った値= 932分です。 remaining_sleep_time関数のコピーを取得するには、以下を参照してください。

1