HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Linuxコマンド, LinuxコマンドA-E, プロセス管理コマンド > crontabコマンドの設定と書き方|動かない時のログ確認までコマンド
「手動で叩くと動くのに、cronに登録すると動かない」「夜中にバックアップを取りたいけど、書き方が合っているか不安」
Linuxサーバーの自動化において、避けては通れないのがこの
crontab(クーロンタブ)です。この記事では、定期的にコマンドを自動実行する crontab の設定方法を解説します。基本的な書き方はもちろん、現場で必ずハマる「環境変数の罠」や「ログの確認方法」まで、実務で困らないための鉄則をまとめました。
1. crontabの基本コマンド(編集・表示・削除)
crontabの設定は、専用のコマンドを使って行います。直接ファイル(/var/spool/cron/など)を編集するのはご法度です。設定を編集する: -e
# crontab -e
設定を表示する: -l
現在登録されている内容を確認するには-l(list)オプションを使います。# crontab -l 0 4 * * * /root/backup.sh
設定を全削除する: -r(要注意)
-r(remove)オプションは、登録されているすべての crontab 設定を確認なしに即削除します。-e と打ち間違えると取り返しがつかないため、現場では使用を避けてバックアップを取ってから削除するのが鉄則です。(下記コマンドの実行前に必ずバックアップを取りましょう)
# crontab -l > ~/crontab_backup.txt # crontab -r
2. スケジュールの書き方(5つの星の意味)
crontabには、左から順に「分・時・日・月・曜日」を指定し、最後に「実行したいコマンド」を書きます。書式:
分 時 日 月 曜日 コマンド| 項目 | 設定できる値 | 意味 |
|---|---|---|
| 分 | 0~59 | 何分に実行するか |
| 時 | 0~23 | 何時に実行するか |
| 日 | 1~31 | 何日に実行するか |
| 月 | 1~12 | 何月に実行するか |
| 曜日 | 0~7 | 0と7は日曜日、1は月曜日... |
よく使う設定例
・毎日 朝4:00に実行:0 4 * * * /path/to/script.sh・毎時 0分に実行(1時間に1回):
0 * * * * /path/to/script.sh・平日(月~金)の12:30に実行:
30 12 * * 1-5 /path/to/script.sh・5分ごとに実行:
*/5 * * * * /path/to/script.sh3. 【現場の鉄則】cronが動かない時の4大原因と対策
「設定したのに動かない!」というトラブルのほぼ全ては、以下の4つが原因です。① コマンドは必ず「絶対パス」で書く
cronで実行される環境では、普段あなたがログインしている時のようなPATH(パス)が通っていません。そのため、python や backup.sh とだけ書いても「そんなコマンドは見つかりません」とエラーになります。・× ダメな例:
0 4 * * * python script.py・○ 正解の例:
0 4 * * * /usr/bin/python3 /home/user/script.pyコマンドもスクリプトも、すべて
/ から始まる絶対パスで書くのが鉄則です。② 環境変数が引き継がれない
cronが実行される環境は、ログイン時のシェルとは別の「最小限の環境」です。PATH だけでなく、JAVA_HOME や LANG(文字コード)などの環境変数も引き継がれません。スクリプトが文字化けしたり、Javaコマンドが見つからないといったトラブルの多くは、crontabの冒頭に必要な環境変数を直接記述することで解決できます。
# crontab -e で設定ファイルの冒頭に環境変数を記述する LANG=ja_JP.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 0 4 * * * /root/backup.sh
③ 実行権限を確認する
実行したいスクリプト自体に「実行権限」がないと、cronは起動に失敗します。# chmod +x /home/user/script.sh
chmod +x で実行権限を付与しておきましょう。④ ログファイル(/var/log/cron)を確認する
動かない時は、悩む前にログを見ましょう。cronの実行履歴は/var/log/cron に出力されます。# tail -f /var/log/cron Feb 24 10:00:01 server CROND[1234]: (root) CMD (/root/backup.sh)
systemctl status crond(Ubuntu/Debian系は systemctl status cron)でサービスの状態を確認してください。※また、Ubuntu/Debian系では実行ログも
/var/log/cron ではなく /var/log/syslog に出力されます。本記事のまとめ
| やりたいこと | コマンド・書き方 |
|---|---|
| 設定を編集する | crontab -e |
| 設定を確認する | crontab -l |
| 設定を全削除する(必ずバックアップ後に実行!) | crontab -r |
| 特定のユーザーの設定を編集 | crontab -u ユーザー名 -e |
| 実行ログを確認する(RHEL系) | tail -f /var/log/cron |
| 実行ログを確認する(Ubuntu/Debian系) | tail -f /var/log/syslog |
| サービスの稼働確認 | systemctl status crond(Ubuntu系は cron) |
自動化のミスで、深夜に叩き起こされた経験はありませんか?
cronの設定ミスやスクリプトの書き方ひとつで、バックアップが取れていなかったり、サーバーが高負荷で停止したりと、自動化にはリスクがつきものです。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る
※メールアドレスだけでもOK(必須項目は最小限)
<<関連記事>>
・pstree
・chsh
・finger
・duコマンドでディスク使用量を確認する方法|ディレクトリごとの容量や容量順ソートも
・LinuxのOSバージョンを確認するコマンド|uname・os-release・hostnamectlの使い方
