シェルを定期実行する方法

シェルを定期実行する方法

シェルスクリプトを定期的に実行する方法として、主に cron と systemd の2つがあります。
それぞれの方法について説明します。

1. cron を使用する方法

cron は、指定した時間にコマンドやスクリプトを自動的に実行するためのツールです。
以下の手順で設定できます。

1. cron のインストールと起動確認

多くのLinuxディストリビューションでは、cron は標準でインストールされていますが、確認するためには次のコマンドを使用します:

sudo systemctl status cron

インストールされていない場合、以下のコマンドでインストールできます:

sudo apt-get install cron   # Debian系ディストリビューションの場合
sudo yum install cronie     # Red Hat系ディストリビューションの場合

2. crontab の編集

crontab ファイルを編集して、スクリプトの定期実行を設定します。
crontab ファイルは、ユーザーごとに設定されます。
編集には以下のコマンドを使用します:

crontab -e

このコマンドを実行すると、デフォルトのエディタが開きます。
そこで、実行したいスクリプトのスケジュールを指定します。

3. スケジュールの設定

crontab で設定するスケジュールの書式は次のようになります:

* * * * * コマンド
- - - - -
| | | | |
| | | | +---- 曜日 (0 - 7) (日曜日は0または7)
| | | +------ 月 (1 - 12)
| | +-------- 日 (1 - 31)
| +---------- 時 (0 - 23)
+------------ 分 (0 - 59)

たとえば、毎日午前3時に /home/user/script.sh を実行したい場合、以下のように設定します:

0 3 * * * /home/user/script.sh

4. cron サービスの再起動

cron 設定を変更した後は、サービスを再起動して設定を反映させます:

sudo systemctl restart cron

2. systemd を使用する方法

systemd を使用して定期的なタスクを設定するには、timer ユニットを作成します。
以下の手順で設定します。

1. サービスユニットファイルの作成

実行したいスクリプトを定義する service ユニットファイルを作成します。
たとえば、/etc/systemd/system/my-script.service として作成します:

[Unit]
Description=Run my script

[Service]
ExecStart=/home/user/script.sh

2. タイマーユニットファイルの作成

次に、タイマーを定義する timer ユニットファイルを作成します。
たとえば、/etc/systemd/system/my-script.timer として作成します:

[Unit]
Description=Run my script every day at 3am

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar=daily で毎日実行する設定になります。
時間を指定する場合は、OnCalendar=03:00 のように指定します。

3. ユニットのリロードと有効化

作成した service および timer ユニットを systemd に認識させ、起動するには次のコマンドを実行します:

sudo systemctl daemon-reload
sudo systemctl enable my-script.timer
sudo systemctl start my-script.timer

4. タイマーの状態確認

タイマーの状態を確認するには次のコマンドを使用します:

systemctl list-timers

このように、cron と systemd を使用してシェルスクリプトの定期実行を設定できます。
用途に応じて適切な方法を選んでください。