毎朝バックアップを取るスクリプトを自動で動かしたい
crontab ってのを使うらしいけど、* が並んでて読めん
【疑問】crontab の「*/15 * * * *」って何?cron と at で決まった時刻にコマンドを動かす【LPICレベル1】
>>1
cron は、決まった時刻にコマンドを動かすデーモン(裏で動き続けるプログラム)。その予定表が crontab
自分の crontab は crontab -e で編集、crontab -l で一覧
>>2
書き方は?
>>3
1行に、時刻を表す5つの欄とコマンドを書く
左から、分(0〜59)、時(0〜23)、日(1〜31)、月(1〜12)、曜日(0〜7、0と7が日曜)30 2 * * * /home/user/backup.sh で、毎日2時30分に実行。* は「どれでも」
>>4*/15 * * * * は?
>>5*/15 は「0から15おき」で、0, 15, 30, 45分
時の欄は * やから毎時。1日に 回動く
平日の朝だけ動かしたいときは?
>>7
範囲は -、並べるなら ,0 8 * * 1-5 で月曜から金曜の8時0分。0 8,18 * * * なら毎日8時と18時
>>8
日の欄と曜日の欄を両方指定したらどうなるん。0 9 1 * 1 とか
>>9
よく間違えるところ。両方に * 以外が入ってると、「どちらかに当てはまる日」に動く0 9 1 * 1 は、毎月1日と毎週月曜の9時。「1日で、しかも月曜」ではない
スクリプトを手で動かすと成功するのに、cron からだと失敗する
>>11
いちばん多いのは環境変数の違い。cron から動くときの PATH は最小限で、ログインしたときの設定ファイルも読まれない
コマンドはフルパスで書くか、crontab の先頭で PATH=... を設定しておく
>>12
失敗したかどうかは、どこで分かるん
>>13
出力は、メールでその crontab の持ち主に送られるのが昔からのしくみ。メールを設定してなければ、そのまま捨てられることもある>> /var/log/backup.log 2>&1 のように、自分でファイルに残しておくのが確実
/etc/crontab は、自分の crontab と何が違うん
>>15
システム全体の crontab で、時刻の5つの欄とコマンドの間に「どのユーザーで動かすか」の欄が1つ多い0 3 * * * root /usr/local/bin/cleanup.sh/etc/cron.daily/ などのディレクトリにスクリプトを置いて、毎日・毎時などにまとめて動かすしくみもある
>>16
一般ユーザーに cron を使わせたくないときは?
>>17/etc/cron.allow があれば、そこに書いたユーザーだけが使える。なくて /etc/cron.deny があれば、そこに書いたユーザーは使えない
at にも /etc/at.allow と /etc/at.deny があって、同じ考え方
at ってのは?
>>19
1回だけ、指定した時刻にコマンドを動かすしくみ。at 23:00 と打って、実行したいコマンドを入力して Ctrl+D
予約の一覧は atq、取り消しは atrm とジョブ番号
>>20
くり返すなら cron、1回だけなら at か
>>21
そう。systemd を使うシステムなら、systemd のタイマー(timer ユニット)で同じことをする方法もある
登録されてるタイマーの一覧は systemctl list-timers
>>4
曜日の 0 と 7、どっちで書けばええん
>>23
どっちで書いても日曜として扱われるsun、mon のような英語の略称でも書ける
分・時・日・月・曜日の順。日と曜日を両方書くと「どちらか」、PATH はフルパスで、やな
管理人のひとこと
- crontab の1行は「分 時 日 月 曜日 コマンド」。
*はどれでも、*/15は15おき(1日96回)、1-5は範囲、8,18は列挙。 - 日と曜日の両方に
*以外を書くと「どちらかに当てはまる日」に動く。 - cron から動くときは PATH が最小限なので、コマンドはフルパスで書き、出力はファイルに残す。
/etc/crontabにはユーザーの欄がある。使える人は cron.allow・cron.deny で決める。 - 1回だけなら
at(一覧は atq、取り消しは atrm)。systemd のタイマーでも同じことができる。