一般ユーザ用crontabファイルは直接上書きしても実行されるか?

/etc/crontabは、エディタで書き換えたり、mv(cp)で置き換えたりしてもきちんと動く。では、/var/spool/cron/[user name] のファイルはどうか?のテスト

前提みたいなもの。

  • Chefで直接

/var/spool/cron/batch_user
とか置けたら楽かな-と。
(いやたぶん/etc/crontabを直すことになるんだろうけど。)

  • 環境は CentOS6.2
  • ユーザ名はrx7fcとする

テスト

1. 適当に実行用のファイルを作る
/home/rx7fc/tmp/c.sh
中身は

#!/bin/sh

touch /home/rx7fc/tmp/t.txt

という感じ

2. そのまま実行してみる

[rx7fc tmp]$ /home/rx7fc/tmp/c.sh
[rx7fc tmp]$ ll /home/rx7fc/tmp/
-rw-rw-r-- 1 rx7fc rx7fc  0  4月 19 14:39 2012 t.txt

きちんとできてる

3. 全く実行されないはずのcrontabのダミーファイルを作る
cronfile.dummy

0 0 1 1 * ~/c.sh

4. ダミーファイルをrx7fcユーザで登録

[rx7fc tmp]$ crontab cronfile.dummy
[rx7fc tmp]$ crontab -l
0 0 1 1 * ~/tmp/c.sh

sudoして一般ユーザのcrontabファイルがどうなっているか確認する

[root ~]# ll /var/spool/cron/rx7fc
-rw------- 1 rx7fc rx7fc 21  4月 19 14:46 2012 /var/spool/cron/rx7fc
[root ~]# cat /var/spool/cron/rx7fc
0 0 1 1 * ~/tmp/c.sh

5. 実行用のcrontabのファイルを作る
数分後に実行されるファイルを作る

[rx7fc tmp]$ date
2012年  4月 19日 木曜日 14:50:01 JST

cronfileを作る

55 * * * * ~/tmp/c.sh

権限確認

[rx7fc tmp]$ ll
-rw-rw-r-- 1 rx7fc rx7fc 22  4月 19 14:50 2012 cronfile

一応diffしてみる(rootで)

[root@localhost rx7fc]# diff /home/rx7fc/tmp/cronfile /var/spool/cron/rx7fc
1c1
< 55 * * * * ~/tmp/c.sh
---
> 0 0 1 1 * ~/tmp/c.sh

6. 大丈夫そうなので上書き&中身確認

[root rx7fc]# cp -p  /home/rx7fc/tmp/cronfile /var/spool/cron/rx7fc 
cp: `/var/spool/cron/rx7fc' を上書きしてもよろしいですか(yes/no)? yes
[root rx7fc]# ll /var/spool/cron/rx7fc
-rw-rw-r-- 1 rx7fc rx7fc 22  4月 19 14:50 2012 /var/spool/cron/rx7fc
[root rx7fc]# cat /var/spool/cron/rx7fc 
55 * * * * ~/tmp/c.sh
[root rx7fc]# 

7. 55分まで待つ

8. できてない。

[rx7fc tmp]$ pwd
/home/rx7fc/tmp
[rx7fc tmp]$ date
2012年  4月 19日 木曜日 14:55:29 JST
[rx7fc tmp]$ ll
合計 16
-rwxrwxr-x 1 rx7fc rx7fc 41  4月 19 14:39 2012 c.sh
-rw-rw-r-- 1 rx7fc rx7fc 22  4月 19 14:50 2012 cronfile
-rw-rw-r-- 1 rx7fc rx7fc 21  4月 19 14:31 2012 cronfile.dummy
[rx7fc tmp]$ 

9. 追試
59分に設定し、普通にcrontabで登録する

[rx7fc tmp]$ emacs cronfile
[rx7fc tmp]$ crontab cronfile
[rx7fc tmp]$ crontab -l
59 * * * * ~/tmp/c.sh
[rx7fc tmp]$ ll
合計 16
-rwxrwxr-x 1 fortune fortune 41  4月 19 14:39 2012 c.sh
-rw-rw-r-- 1 fortune fortune 21  4月 19 15:00 2012 cronfile
-rw-rw-r-- 1 fortune fortune 17  4月 19 14:31 2012 cronfile.dummy
-rw-r--r-- 1 fortune fortune  0  4月 19 14:59 2012 t.txt

できている。

10. 結論
/etc/crontabと違って、直接いじってもダメっぽい