# 基本
実行には root権限 が必要
一般ユーザーでroot
の設定を操作するにはsudo
の事前設定が必要
# crontab
-l: cronを一覧で表示
-e: cronを設定するエディタを起動する
-u: cronを設定するユーザーを指定
-r: cronの設定を全消去
# crontab [ -u ユーザ名 ] { -l | -r | -e }
crontab -e
# 実行ユーザーを指定して実行
crontab -u user1 -e
sudo crontab -u root -e
分 時 日 月 曜日 実行コマンド
* * * * * SomeCommand_or_FilePath
設定項目 | 設定可能な数値範囲 |
---|---|
分 | 0-59 |
時 | 0-23 |
日 | 1-31 |
月 | 1-12 |
曜日 | 0-7 |
・24時という設定値は無いので注意。24時は0
時で設定
・月曜〜土曜 = 1 ~ 6
・日曜 = 7 or 0
記述が完了したら保存してエディタを閉じる
crontab: installing new crontab
crontab -l
# カレントユーザーのcron内容をバックアップファイル化
crontab -l > crontab1.bak
# ユーザー指定もできる(rootのcron内容をバックアップする場合)
sudo crontab -u root -l > crontab_root.bak
crontab crontab1.bak
# crontab1.bakの内容がそのままcrontab に反映される
ログ
/var/log/cron
ファイル内容を表示するにはroot権限が必要
# ログ閲覧
sudo less /var/log/cron
# ログのリアルタイム表示
sudo tail -f /var/log/cron
# or
sudo less +F /var/log/cron
ログ出力先の設定が通常と異なる場合は以下を確認
/etc/rsyslog.conf
cat /etc/rsyslog.conf | grep "cron.\* "
#less +/cron.\* /etc/rsyslog.conf
cron.* /var/log/cron
設定例
# 毎日15時に実行
0 15 * * * echo "hoge"
# 実行間隔( / ) → 5分ごとに実行(0:00〜23:55)
*/5 * * * * echo "hoge"
## 0時〜22時(23時)までの間、毎時0分に2時間おきで実行(0:00, 2:00, 4:00, ・・・22:00)
0 */2 * * * echo "hoge"
# 複数指定( , で区切る) → 5時5分、10分、30分 に実行
5,10,30 5 * * * echo "hoge"
# 範囲指定( - ) → 3時10分、4時10分、5時10分、6時10分 に実行
10 3-6 * * * /home/piyo/hoge.sh
# (- /)
# 毎時3〜58分の間、5分おきに実行(3分,8分,13分,18分,23分・・・58分)
03-58/5 * * * * echo "hoge"
## 21時〜24時までの間、5分毎に実行(21:00, 21:05, 21:10, ・・・ 23:55, 24:00)
0-55/5 21-23 * * * echo "hoge"
0 0 * * * echo "hoge"
# バックアップ
crontab -l > "crontab_$(whoami)_$(date +"%Y_%m_%d").bak"
# 設定ファイルを用意
echo '* * * * * echo "hoge"' > test_cron.conf
# cronに設定する(設定追記ではなく、ファイル内容で上書き)
crontab test_cron.conf
設定確認
less +F /var/log/cron
service crond status
service crond start
# コメントアウトを外す
# User "root" should be allowed to get access via cron .. tty5 tty6.
#+ : root : cron crond :0 tty1 tty2 tty3 tty4 tty5 tty6
↓
# User "root" should be allowed to get access via cron .. tty5 tty6.
+ : root : cron crond :0 tty1 tty2 tty3 tty4 tty5 tty6
systemctl restart sshd.service
cronにpamのエラーが出た際の回避方法 - エクセレンス★ブログ
#ls /var/spool/cron/ユーザ名
ls /var/spool/cron/root
#-rw------- 1 root root 24 2月 10 02:50 /var/spool/cron/root
# 実行権限を付与
chmod +x /var/spool/cron/root
コマンド最終行には改行が必要(実行させるためには)
crontab -e
で編集する分には特に意識する必要は無さそう
* * * * * /bin/echo ugoku
* * * * * /bin/echo ugokuzoi
[EOF]
* * * * * /bin/echo ugoku
* * * * * /bin/echo ugokan[EOF]
cronの設定ファイルは終端に改行が必要 - ngyukiの日記
%
はエスケープ処理が必要
date
コマンドに限らず、(cron記述内での)エスケープ処理しない%
は改行扱いとなるみたい
man
に載ってる常識という。。。
dateコマンド記載時の注意
(Windows
からssh(Teraterm)などで接続して操作してる状態だと、\
は¥
マーク表示)
* * * * * echo "$(date +"\%Y_\%m_\%d")"
dateコマンドで%
表記を使用する場合、エスケープ処理しとかないと設定した処理の実行がそこで中断(改行)してしまう。
* * * * * echo "now $(date +"%Y_%m_%d")"
# cron実行時にコマンドが途中で終わり、正しく実行されない
Jal 69 05:55:01 cinta93 CROND[9856]: (user) CMD (echo "now $(date +")
なので、%
の前に\
を付けてエスケープ処理するように記述しておく
* * * * * echo "now $(date +"\%Y_\%m_\%d")"
Jal 69 05:58:01 cinta93 CROND[9859]: (user) CMD (echo "now $(date +"%Y_%m_%d")")
(通常のコンソールでのコマンド実行時は % の前に \ があるとエラーになるので見落としがち。。。)
参考
crontabの書き方 | server-memo.net
cronの設定方法
初心者向けcronの使い方
crontabを設定しても実行されない時の確認ポイント · GitHub
cronが動かない BAD FILE MODE (/etc/crontab) – 猫のプロトコル
/etc/crontabと/etc/cron.d設定ファイルの書き方 | server-memo.net
cronのログを見よう | | Linuxエンジニアの備忘Log
クーロン(cron)をさわってみるお
cron を10分おき 2時間おきに実行する方法 | ex1-lab
時間をずらしてcronを実行する - Qiita