0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntuでcronを使う(Linuxで定期的にプログラムを実行する方法)

Posted at

当記事を理解するためにはLinuxのコマンド、ファイルの操作権限についての前提知識が必要です。
知識不足と感じられる方は、Linuxの基礎から始めることをオススメいたします。

はじめに

Progaku Advent Calendar 2024 3日目担当のリプトンと申します。よろしくお願いいたします。
今回はLinux環境でプログラムの定期実行する方法についてまとめてみました。

実行環境

Ubuntu22.04

shell
root@xxx-xxx-xxx-xxx:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

Linuxの定期実行の実装検討

cronを使用することにしました。メジャーな方法かと思います。

cronの実装

①cronサービスが動いているか確認

shell
root@xxx-xxx-xxx-xxx:~# 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 Mon xxxx-xx-xx xx:xx:xx JST; xx days ago
       Docs: man:cron(8)
   Main PID: 901 (cron)
      Tasks: 1 (limit: 2220)
     Memory: 49.1M
        CPU: 15h 51min 44.785s
     CGroup: /system.slice/cron.service
             └─901 /usr/sbin/cron -f -P

Active: active (running)なので大丈夫ですね。

②cronで動かすプログラムを作成

/etc/selenium/cron.pyを作成。pythonファイルの中身は今回は関係ないので割愛。

③cronを設定する際のファイルを配置するディレクトリの確認

/etc/cron.hourly/: 毎時実行するファイルを置くディレクトリ
/etc/cron.daily/: 毎日実行するファイルを置くディレクトリ (logrotateなど)
/etc/cron.monthly/: 毎月実行するファイルを置くディレクトリ
/etc/cron.weekly/: 毎週実行するファイルを置くディレクトリ
/etc/cron.d/: 上記以外の自動実行に関する設定ファイル
/var/spool/anacron/: anacron関連のファイル
/var/spool/cron/crontabs/: anacron関連のファイル

→毎時0分、20分、40分に実行してほしかったので/etc/cron.d/に作成することに。

④cron設定の書き方

20分に1回シェル実行をしてほしかったので下記のように記載。

/etc/cron.d/selenium_cron
*/20 * * * * root /bin/bash /etc/selenium/cron.sh
/etc/selenium/cron.sh
#!/bin/bash
cd /etc/selenium
/usr/bin/python3 cron.py

以上で必要なファイルを用意できました。

⑤cron.shの実行権限付与

完成したと思ったそこのあなた!(はい、私です🫡)
cron.shの実行権限がないとこけます。つけましょう。
(ファイル所有者のみ権限与えてもよかったかもですが、致命的ではないのでここでは放置します。)

shell
root@xxx-xxx-xxx-xxx:/etc/selenium# ls -l
-rw-r--r-- cron.sh
root@xxx-xxx-xxx-xxx:/etc/selenium# chmod a+x cron.sh
root@xxx-xxx-xxx-xxx:/etc/selenium# ls -l
-rwxr-xr-x cron.sh

⑥念のため、cronサービスの再起動

shell
root@xxx-xxx-xxx-xxx:~# systemctl restart cron

⑦実行されるまで待つ

今回の場合、20分待てば実行されるのでそれまでティータイム🫖です。

⑧実行後ログを確認する

ログを確認すると計画通りに実行できていました。

shell
root@xxx-xxx-xxx-xxx:~# journalctl -r -u cron
Nov xx 13:20:01 xxx-xxx-xxx-xxx CRON[299458]: (root) CMD (/bin/bash /etc/selenium/cron.sh)

あとがき

予算の都合からLinuxサーバーを使用することも多いと思います。
今回のような設定系は特に忘れてしまいがちです。記事兼忘備録として作成させていただきました。
もし内容に間違いなどありましたらお手数ですがコメントでお知らせください。

↓参考にした記事(ありがとう)

最後にちょっとだけProgakuの紹介
Progakuは完全無料のプログラミングの勉強を支援するオンラインコミュニティです。執筆時のメンバー数は215名です。
メンバーはエンジニアとエンジニアを目指す人で構成されています。質問がある方が自由に投稿し回答を募るスタイルです。
不定期にメンバー募集をしていますので、興味がある方は代表のとくゆーまでお問い合わせください。
ありがとうございました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?