繰り返し実行されるbashスクリプトの書き方

繰り返し実行されるbashスクリプトの書き方

新しい情報を収集してデータベースを更新するために、一連のコマンドライン命令を必要とするプログラムを作成しました。

このプロセスを自動化して、毎回ターミナルにこのすべての情報を入力しなくても済むようにする方法はありますか? 最初の 3 つのステップは 1 時間ごとに実行し、ステップ 4 は完了までに長い時間がかかる可能性があるため、午前 2 時に実行するように設定できます。

ステップ1:ターミナルで:

...Documents/dota2/dotaapi2/ python match_scraper.py 

ステップ2:ターミナル内

 psql dota2apidb
 update games set online=1 where online is null;

ステップ3:ターミナルで:

...Documents/dota2/gosugamers/gosugamers/spiders/ scrapy crawl dota

ステップ4:ターミナルで: (午前 2 時に 1 回だけ実行)

...Documents/dota2/dotaapi2/ python gosu_merge.py

...Documents/dota2/dotaapi2/ python unticketed.py

答え1

1 つの解決策としては、ゲーム ディレクトリをロック/ロック解除する cronjobs を設定することが考えられます。これを行うには、以下の手順に従ってください。

  1. cronデーモンがインストールされていることを確認してください

    sudo apt-get install cron
    
  2. ルートで実行するためのcronジョブの設定

次のコマンドを発行して、cronjob の編集を開始します。

sudo crontab -e

次の行をエディターに追加します。

00 */1 * * * ...Documents/dota2/dotaapi2/ python match_scraper.py
01 */1 * * * psql dota2apidb
02 */1 * * * update games set online=1 where online is null;
03 */1 * * * ...Documents/dota2/gosugamers/gosugamers/spiders/ scrapy crawl dota
04 02 * * * ...Documents/dota2/dotaapi2/ python gosu_merge.py
05 02 * * * ...Documents/dota2/dotaapi2/ python unticketed.py

(念のため、適切なコマンドとパスを使用する必要があります。準備した bash スクリプトにその一部を入れて、実行される cron の数を減らすこともできます)

答え2

ステップ1、2、3をscript1.shに入力し、ステップ4をscript2.shに入力します。

次にセットアップクローン適切なユーザーがスケジュールに従ってスクリプトを実行できるようにするには:

minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday), command

    01 * * * * /usr/bin/directory/script1.sh
    30 2 * * * /usr/bin/directory/script2.sh

script1.sh は毎日毎時 01 分に実行され、script2.sh は毎日 0200 時 30 分に実行されます。

関連情報