読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】crontab の「*/15 * * * *」って何?cron と at で決まった時刻にコマンドを動かす【LPICレベル1】

25レスカテゴリ:Linux
1: 名無しさん

毎朝バックアップを取るスクリプトを自動で動かしたい
crontab ってのを使うらしいけど、* が並んでて読めん

2: 名無しさん

>>1
cron は、決まった時刻にコマンドを動かすデーモン(裏で動き続けるプログラム)。その予定表が crontab
自分の crontab は crontab -e で編集、crontab -l で一覧

3: 名無しさん

>>2
書き方は?

4: 名無しさん

>>3
1行に、時刻を表す5つの欄とコマンドを書く
左から、分(0〜59)、時(0〜23)、日(1〜31)、月(1〜12)、曜日(0〜7、0と7が日曜)
30 2 * * * /home/user/backup.sh で、毎日2時30分に実行。* は「どれでも」

5: 名無しさん

>>4
*/15 * * * * は?

6: 名無しさん

>>5
*/15 は「0から15おき」で、0, 15, 30, 45分
時の欄は * やから毎時。1日に 回動く

7: 名無しさん

平日の朝だけ動かしたいときは?

8: 名無しさん

>>7
範囲は -、並べるなら ,
0 8 * * 1-5 で月曜から金曜の8時0分。0 8,18 * * * なら毎日8時と18時

9: 名無しさん

>>8
日の欄と曜日の欄を両方指定したらどうなるん。0 9 1 * 1 とか

10: 名無しさん

>>9
よく間違えるところ。両方に * 以外が入ってると、「どちらかに当てはまる日」に動く
0 9 1 * 1 は、毎月1日と毎週月曜の9時。「1日で、しかも月曜」ではない

11: 名無しさん

スクリプトを手で動かすと成功するのに、cron からだと失敗する

12: 名無しさん

>>11
いちばん多いのは環境変数の違い。cron から動くときの PATH は最小限で、ログインしたときの設定ファイルも読まれない
コマンドはフルパスで書くか、crontab の先頭で PATH=... を設定しておく

13: 名無しさん

>>12
失敗したかどうかは、どこで分かるん

14: 名無しさん

>>13
出力は、メールでその crontab の持ち主に送られるのが昔からのしくみ。メールを設定してなければ、そのまま捨てられることもある
>> /var/log/backup.log 2>&1 のように、自分でファイルに残しておくのが確実

15: 名無しさん

/etc/crontab は、自分の crontab と何が違うん

16: 名無しさん

>>15
システム全体の crontab で、時刻の5つの欄とコマンドの間に「どのユーザーで動かすか」の欄が1つ多い
0 3 * * * root /usr/local/bin/cleanup.sh
/etc/cron.daily/ などのディレクトリにスクリプトを置いて、毎日・毎時などにまとめて動かすしくみもある

17: 名無しさん

>>16
一般ユーザーに cron を使わせたくないときは?

18: 名無しさん

>>17
/etc/cron.allow があれば、そこに書いたユーザーだけが使える。なくて /etc/cron.deny があれば、そこに書いたユーザーは使えない
at にも /etc/at.allow と /etc/at.deny があって、同じ考え方

19: 名無しさん

at ってのは?

20: 名無しさん

>>19
1回だけ、指定した時刻にコマンドを動かすしくみ。at 23:00 と打って、実行したいコマンドを入力して Ctrl+D
予約の一覧は atq、取り消しは atrm とジョブ番号

21: 名無しさん

>>20
くり返すなら cron、1回だけなら at か

22: 名無しさん

>>21
そう。systemd を使うシステムなら、systemd のタイマー(timer ユニット)で同じことをする方法もある
登録されてるタイマーの一覧は systemctl list-timers

23: 名無しさん

>>4
曜日の 0 と 7、どっちで書けばええん

24: 名無しさん

>>23
どっちで書いても日曜として扱われる
sun、mon のような英語の略称でも書ける

25: 名無しさん

分・時・日・月・曜日の順。日と曜日を両方書くと「どちらか」、PATH はフルパスで、やな

管理人のひとこと