編集済み 19 数時間前 によって ExtremeHow 編集チーム
自動化スケジューリングコマンドラインタスク管理スクリプトシステムメンテナンス日時管理ユーティリティスクリプティングシスアドミン
翻訳が更新されました 19 数時間前
Cronジョブは、Linuxでタスクをスケジュールするための非常に強力かつ柔軟なシステムです。サーバー上のプロセスやルーチン、スクリプトを自動化することができます。バックアップの自動化、システムステータスの確認、一時ファイルのクリア、定期メールの送信を手動で覚えることなく自動化できると想像してみてください。cronジョブはスケジュールされた時間にバックグラウンドで実行されます。cronを使用することで、努力を節約するだけでなく、作業の貴重な時間を節約し、全体のシステム効率を向上させることができます。
Cronデーモンは、Linuxでcronジョブを管理するバックグラウンドプロセスです。cronジョブが動作するには、cronデーモンがシステム上で実行されている必要があります。ほとんどのLinuxディストリビューションにはcronが事前にインストールされています。ただし、インストールされていない場合は、パッケージマネージャーを使用してインストールできます。
異なるディストリビューションでの手順は次のとおりです:
Debian/Ubuntuベースのシステム:sudo apt-get update sudo apt-get install cron
Red Hat/CentOSベースのシステム:sudo yum update sudo yum install cronie
インストールが完了したら、次のようにしてcronサービスを開始できます:
sudo systemctl start cron
起動時にcronを開始するには、有効にします:
sudo systemctl enable cron
Cronジョブは、crontabと呼ばれるファイルに定義されています。各ユーザーは自分のcrontabを持つことができ、システム全体のcrontabファイルもあります。crontabファイルは各cronジョブのスケジュールとコマンドを定義します。`crontab -e`コマンドを使用してユーザーのcrontabを編集することができます。これにより、デフォルトのシステムエディタでcrontabファイルが開きます。
crontabファイルには、特定の構文で定義されたスケジュールされたタスクを表す行が含まれています。典型的なcronジョブエントリは次のようになります:
* * * * * /path/to/command
各フィールドはスペースで区切られ、異なる時間単位を表しています:
コマンド自体はこれらの時間仕様に従い、実行されるアクションを定義します。
cronジョブのスケジュールがどのように機能するかをよりよく理解するために、いくつかの例を見てみましょう。
0 2 * * * /path/to/backup.sh
0 * * * * /usr/local/bin/logrotate
0 0 * * 0 /usr/local/bin/maintenance
0 12 1 * * /usr/local/bin/generate-report
Cronはまた、カンマ、ハイフン、スラッシュなどの演算子を使用して、複数の値や間隔を定義することもできます。以下はその方法です:
0 1,3 * * * /path/to/script
*/1 5 1-10 * * /path/to/task
*/30 * * * * /path/to/half-hourly-task
Cronジョブは自身の限られた環境で実行され、時にはユーザーシェルと同じ設定がないことがあります。スクリプトを正しく実行するために、crontabファイルに環境変数を設定する必要があることがよくあります。たとえば、PATH変数を設定するのが一般的です:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin * * * * * /path/to/myjob
デフォルトでは、cronはジョブを実行するユーザーにメールを送信し、ジョブが生成した出力を含みます。メールで出力を受け取りたくない場合やログに記録したい場合は、出力をファイルにリダイレクトできます。
標準出力とエラーをリダイレクトする方法は次のとおりです:
* * * * * /path/to/script > /path/to/logfile 2>&1
この例では、出力とエラーメッセージの両方をログファイルに送信します。
`crontab`コマンドは、cronジョブを設定する主な方法です。以下は最もよく使用されるオプションです:
crontab -e
:ユーザーのcrontabを編集します。crontab -l
:ユーザーのcronジョブを一覧表示します。crontab -r
:ユーザーのcrontabを削除します。crontab -u username -e
:権限があれば他のユーザーのcrontabを編集します。基本操作に加えて、cronジョブの力をさらに活用するための高度な使用パターンもあります。
時には、他のタスクが正常に完了した場合にのみ実行したいタスクがあります。そのような場合、スクリプティングが役立ちます。最初に一つのスクリプトを呼び出し、その後に条件をチェックするマスター スクリプトを作成できます。
#!/bin/bash if /path/to/first-script; then /path/to/second-script fi
このマスタースクリプトをcrontabに入れることで、2つのタスクを効果的に結合できます。
時には、特にスクリプティングのシナリオでは、一時的なcrontabファイルを使用すると便利です。crontabファイルを作成し、次のように`crontab`コマンドで使用できます:
crontab mycronfile
このコマンドは、`mycronfile`の内容に基づいてユーザーのcronジョブを設定します。
個人用crontabに加えて、すべてのユーザーのジョブをスケジュールするシステムcrontabファイルがあります。これは /etc/crontab
にあります。ここでは、ジョブの前にスクリプトを実行するユーザーを指定する追加フィールドがあります。一般的なシステムメンテナンススクリプトはここにあります。
/etc/crontab * * * * * user /path/to/command
さらに、/etc/cron.hourly
、/etc/cron.daily
、/etc/cron.weekly
、および/etc/cron.monthly
のディレクトリ内のスクリプトは、それぞれの時間に実行され、システム構成によって管理されます。
Crontabは、5つのフィールドの代わりに特殊な文字列もサポートしています:
0 0 1 1 *
。0 0 1 * *
。0 0 * * 0
。0 0 * * *
。0 * * * *
。これらのキーワードは、一般的なプログラムを簡単に決定するのに役立ちます。
Cronジョブを扱う際には、セキュリティを考慮することが重要です。Cron機能にアクセスできるユーザーは、自分のジョブを作成でき、システムと対話できます。/etc/cron.allow
と/etc/cron.deny
ファイルは、cronを使用する特権を持つユーザーを管理できます。
デフォルトでは、/etc/cron.allow
が存在する場合、そのユーザー名を含める必要があります。さもなければ、/etc/cron.deny
が存在する場合、そのユーザー名を含まないことがアクセスを許可する条件です。これらのファイルが存在しない場合、通常、ルートのみがcronジョブをスケジュールできます。
cronジョブは、コマンドの構文が誤っている場合や環境条件が満たされない場合にエラーを引き起こす可能性があります。以下はいくつかのテストとトラブルシューティング方法です。
コマンドをターミナルで手動でテストして、期待通りに機能するか確認します。cronは対話式のプロンプトを提供しません。
一時的にcronジョブを毎分実行するよう設定して、正しくトリガーされるか確認します。
* * * * * /path/to/command
cronデーモンのログを確認して問題を特定することができます。通常、このログファイルは以下にあります:
/var/log/cron /var/log/syslog (ディストリビューションによる)
このログは、cronジョブが実行されたか、エラーが発生したかを判断するのに役立ちます。
前述のように、出力をファイルにリダイレクトすることでエラーメッセージを取集し、調査します。
CronはLinuxシステムでの基本ツールであり、信頼性と柔軟性を持って自動化タスクをスケジュールします。cronジョブの構文、環境、構成を理解することで、ルーティンタスクを効果的に管理し、作業プロセスを最適化できます。システム管理者や開発者にとって、cronジョブを習得することは生産性を大幅に向上させることができます。
この詳細なガイドがcronジョブの効果的な使用に役立つことを願っています。スケジュールを楽しんでください!
記事の内容に誤りがある場合, あなたは