Web制作、Web開発の歩き方

Linux Essentials for Web Developers

第7話:バッチ処理と自動化: cronとスクリプトを使ったタスク処理

(最終更新日:2024.11.22)

Linuxのイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「バッチ処理で定期実行を!」

バッチ処理と処理の自動化では、Linuxのcronジョブとシェルスクリプトを活用することが重要だ。 cronを使うと、特定の時間や間隔でスクリプトやコマンド、プログラムを自動実行できる。 一方で、シェルスクリプトは実行したい一連のコマンドを含むプログラムファイルで、 バックアップ作成、システム監視、データ処理などのタスク、一連の流れを自動化することができる。 これらを上手く組み合わせることで、定期的なメンテナンスや反復作業を自動処理でき、システム管理が非常に簡単になる。

今回は、このcronジョブとシェルスクリプトを用いたバッチ処理の自動化について説明する。


1.cronジョブの設定方法

Linuxで行うバッチ処理とタスク自動化には、cron というスケジューリングツールがよく使われる。 cronを使用すると、定期的に実行したいコマンドやスクリプトを設定できる。

cronジョブ(スケジューラー)の設定は、ターミナルでcrontab -eコマンドで呼び出すことができる。 このコマンドでcrontabファイルの編集画面が開く。 特定のユーザのcronを編集することもできるが、基本的にはroot権限で行うことが多い。 なぜなら、システム全体に関わるタスクは、suやsudoのスーパーユーザーで行う必要があるからだ。 一般的に、特定のユーザーの範囲内で完結するタスクはそのユーザーのcrontabで設定し、 システム全体に影響を与えるようなタスクはrootユーザーのcrontabで設定する。

crontabファイルには、実行したいコマンドとそれを実行する時間を指定する。 形式としては「分、時、日、月、曜日、コマンド」の順になる。 下記に例を取り上げる。 1行目は「毎日午前3時にbackup.sh スクリプトを実行する」、 2行目は「毎週月曜日の午前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エディタで記述することが可能になる。 nanoの部分を別のエディタにすれば、好みのエディタを使うことができる。

3.まとめ

今回はLinuxのcronとシェルスクリプトについて説明した。 これらを用いれば、データベースのバックアップなど、定期的に実行したいタスクを自動化することができる。 また、時間だけでなく、起動時に自動的に実行させることも可能である。 定期実行させたいタスク、起動時に動かしたいプログラムを自動的に動かしたいのであれば、cronとシェルスクリプトが非常に役に立つだろう。 また、シェルスクリプトだけでなく、Linuxコマンドを実行させることができることから、 PythonやPHPなどの言語で書かれたプログラムを自動実行することも可能である。 サーバーを管理する立場になったら、ぜひ有効活用してみよう。

▼参考図書、サイト

 「スーパーユーザーなら知っておくべきLinuxシステムの仕組み」 インプレス Brian Ward, 柴田 芳樹
 「Linux再入門―カーネル、シェル、ファイルといった基本概念を理解してトラブルシューティング力を高めよう」 Udemy しま