概要
サーバ上で定期的にコマンドを実行させたいときに、シェルスクリプトをローカルで実行させる方法があるので、そちらをまとめる。
実行させるシェルの作成
まずは、シェルスクリプトを作成する。
vi シェルスクリプト名
シェルスクリプトの書き方は、およそ以下の通り。
- 1回目、2回目に実行するコマンド
- ここに、
cat ファイル名
とか、sudo ~~
みたいなコマンドを入れる。
これを、必要な分だけ続けていく
- ここに、
#! /bin/bash
1回目に実行するコマンド
2回目に実行するコマンド
・・・以下略
次に、先ほど作成したシェルスクリプト名に実行権限を与える
sudo chmod 755 シェルスクリプト名
これで、以下のように入力する事で、シェルスクリプトの中身を実行する事ができる。
./シェルスクリプト名
cronの設定
以下のコマンドで一般ユーザから、rootに変更する。
su -
その後、以下のコマンドで、crontabを編集する。
crontab -e
crontabは、空白を開けて分、字などを記録していく。
書式はこんな感じ。
00 17 23 * * /home/username/sample_make_c_list.sh
左から、[分] [時] [日] [月] [曜日] [コマンド(スクリプトパス)]
上記の形で見ると、毎月23日17時に、sample_make_c_list.shを実行する
という形である。
- 分は0~59の数字で指定
- 時は0~23の数字で指定
- 日は1~31の数字で指定
- 月は1~12の数字で指定
- 曜日は0と7が日曜日、1以降は順に、月、火、水、木、金、土
- コマンド(フルパスで指定するかカレントディレクトリからの相対パスで指定する
保存したら、以下のコマンドで、登録されているシェルを確認できる。
crontab -l
また、実行できるかの確認のために、以下のコマンドで、crond.serviceが起動しているかを確認する。
systemctl status crond.service
activeになっているならOK
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 金 2023-04-28 17:01:03 JST; 1 weeks 2 days ago
Main PID: 592 (crond)
Tasks: 1
Memory: 1.2M
曜日判定と、定期処理で実行させる。
毎月第三金曜日にシェルを実行させるみたいな方法を設定させる方法。
シェルスクリプトを、以下の形で編集させる。
vi シェルスクリプト名
#金曜日のみ実施する場合
a=` date +%w`
if [ "$a" == "5" ];then
1回目に実行するコマンド
2回目に実行するコマンド
・・・以下略
fi
dateコマンドの結果を%wとして取得し、その値をaとする。そして、その内容がifで指定する数字と等しいなら、if文内を実行するという内容になる。曜日は、上記のcrontabの書き方を参照すること。
crontabの設定
そして、これをcrontab -e
で設定するときに、以下のように設定する。
00 17 24-31 * * シェルスクリプト名
この場合、24日~31日の間の17時でシェルスクリプトを実行し続ける形になる。
他にも、最初の週であれば、1~7、その次なら8~14といった形になる、
参考サイト