Linux Essentials for Web Developers
第7話:バッチ処理と自動化: cronとスクリプトを使ったタスク処理
(最終更新日:2023.12.31)
(絵が小さい場合はスマホを横に)
「バッチ処理で定期実行を」
バッチ処理と自動化では、Linuxのcronジョブとシェルスクリプトが重要だ。
cronを使うと、特定の時間や間隔でスクリプトやコマンドを自動的に実行できる。
ユーザーはcrontabファイルにスケジュールと実行するタスクを記述する。
一方で、シェルスクリプトは実行したい一連のコマンドを含むファイルで、バックアップ作成、システム監視、データ処理などのタスクを自動化するのに使われる。
これにより、定期的なメンテナンスや反復作業を効率的に処理でき、システム管理が大幅に簡単になる。
今回は、このcronジョブとシェルスクリプトを用いたバッチ処理の自動化について説明する。
1.cronジョブの設定方法
Linuxでのバッチ処理とタスク自動化には、cron というスケジューリングツールがよく使われる。
cronを使用すると、定期的に実行したいコマンドやスクリプトを設定できる。
cronジョブ(スケジューラー)の設定は、ターミナルでcrontab -eコマンドで行うこことができる。
特定のユーザのcronを編集することもできるが、root権限が必要である。
システム全体に関わるタスクは、suやsudoのスーパーユーザーで行う。
一般的に、特定のユーザーの範囲内で完結するタスクはそのユーザーの crontab で設定し、
システム全体に影響を与えるようなタスクはrootユーザーの crontab で設定することが一般的になる。
crontabファイルには、実行したいコマンドとそれを実行する時間を指定する。
形式としては「分、時、日、月、曜日、コマンド」の順になる。
1番目は「毎日午前3時にbackup.sh スクリプトを実行する」、
2番目は「毎週月曜日にシステム更新を実行する」
例である。
- ■crontabによるスケジューリング例
- 0 3 * * * /path/to/backup.sh
- 0 2 * * 1 apt update && apt upgrade -y
cronを使う際の注意点としては、cronは異なる環境変数を持つため、スクリプトやコマンドが予期せぬ方法で動作することがある。
絶対パスで指定するなり、明示的に設定することが必要になる。
また、cronjobの出力はデフォルトではメールで送信されるが、
「>/path/to/logfile 2>&1」をコマンドの末尾に追加することで、ログをファイル保存することができる。
cronを用いることで、スケジュール実行できる
2.簡単な自動化スクリプトの作成
Linuxにおけるシェルスクリプトの書き方自体は、本稿の第5話で説明した。 スクリプトの最初に「#!/bin/bash」をつけ、Bashシェルで実行されることを指定するのが特徴的だ。 下記は、homeディレクトリのバックアップを作成するシェルスクリプトである。 backup.shという名前で保存したら、chmodコマンドで実行権限を設定するのを忘れないようにしよう。
crontabに設定を保存するため、スーパーユーザーになったら「crontab -e」コマンドを実行し、 1の項で書いた「0 3 * * * /path/to/backup.sh」を追記する。毎日午前3時にバックアップを行いたい場合はこれでOKだ。 毎週月曜日だけバックアップをしたい場合は「0 3 * * *」の部分を「0 3 * * 1」にすれば、変更できる。 0が日曜日で、そこから順番に1が月曜、2が火曜・・・という仕様だ。 また「0 3 * * *」の部分を「@reboot」にすれば、システム起動時に実行させることもできる。
スクリプトに処理をまとめて、自動実行することができる
ちなみに、crontabの設定はLinuxデフォルトのエディタで行う。大抵はviかvimになるだろう。 違うエディタで設定したい場合は「EDITOR=nano crontab -e」とすることで、例えばnanoエディタで記述することが可能だ。
3.まとめ
今回はLinuxのcronとシェルスクリプトを用いれば、データベースのバックアップなど、定期的に実行したいタスクを自動化することができる。 また、時間だけでなく、起動時に自動的に実行させることも可能である。 定期実行させたいタスク、起動時に動かしたいプログラムを自動的に動かしたいのであれば、cronとシェルスクリプトが非常に役に立つだろう。 また、シェルスクリプトだけでなく、コマンドも実行させることができることから、PythonやPHPなどの言語で書かれた処理を自動実行することも可能である。 サーバーを管理する立場になったら、ぜひ有効活用してみよう。
▼参考図書、サイト
「スーパーユーザーなら知っておくべきLinuxシステムの仕組み」 インプレス Brian Ward, 柴田 芳樹
「Linux再入門―カーネル、シェル、ファイルといった基本概念を理解してトラブルシューティング力を高めよう」 Udemy しま