为archlinux配置cron

cron的作用:cron可以用来周期性地自动执行一些命令。

 

cron的实现:cron有很多实现版本,例如:cronie, dcron, fcron, bcron, vixie-cron,我安装的是 cronie

 

安装的方法:

pacman -S cronie

 

安装完成后,cronie 在系统中增加的文件:

cronie /etc/
cronie /etc/anacrontab
cronie /etc/cron.d/
cronie /etc/cron.d/0hourly
cronie /etc/cron.daily/
cronie /etc/cron.deny
cronie /etc/cron.hourly/
cronie /etc/cron.hourly/0anacron
cronie /etc/cron.monthly/
cronie /etc/cron.weekly/
cronie /etc/pam.d/
cronie /etc/pam.d/crond
cronie /usr/
cronie /usr/bin/
cronie /usr/bin/anacron
cronie /usr/bin/crond
cronie /usr/bin/crontab
cronie /usr/lib/
cronie /usr/lib/systemd/
cronie /usr/lib/systemd/system/
cronie /usr/lib/systemd/system/cronie.service
cronie /usr/share/
cronie /usr/share/licenses/
cronie /usr/share/licenses/cronie/
cronie /usr/share/licenses/cronie/COPYING
cronie /usr/share/man/
cronie /usr/share/man/man1/
cronie /usr/share/man/man1/crontab.1.gz
cronie /usr/share/man/man5/
cronie /usr/share/man/man5/anacrontab.5.gz
cronie /usr/share/man/man5/crontab.5.gz
cronie /usr/share/man/man8/
cronie /usr/share/man/man8/anacron.8.gz
cronie /usr/share/man/man8/cron.8.gz
cronie /usr/share/man/man8/crond.8.gz
cronie /var/
cronie /var/spool/
cronie /var/spool/anacron/
cronie /var/spool/cron/
View Code

 

从这个文件列表中,可以看到有三个可执行文件 /bin/anacron,/bin/crond,/bin/crontab

其中anacron和crond都能够做到以daemon的方式运行在后台,并且周期性地执行配置文件中指定的命令。至于二者的区别,请自行阅读各自的manual。

通过查看 /usr/lib/systemd/system/cronie.service ,发现里面用到的是 crond。至于crond会读取哪些配置文件,请自行阅读crond的manual。

第三个可执行文件 crontab 是用于维护配置文件的。

 

crond通过两种方式监测配置文件的改动,一种是使用inotify的方式,另一种是每分钟检查配置文件的modtime,这两种方式都不需要你在修改了配置文件之后手动重启 crond。

 

archlinux的wiki上说不应该直接编辑配置文件,应该使用crontab这个命令进行操作。

基本的crontab命令:

#列出当前用户的配置文件
crontab -l

#编辑当前用户的配置文件
crontab -e

#删除当前用户的配置文件
crontab -r

crontab 的详细用法可以参考 man crontab

经过测试发现,当编辑完当前用户的配置文件然后保存之后,实际上是在 /var/spool/cron/ 这个目录下多了一个以用户名作为文件名的文件。

有一个地方挺奇怪的,/var/spool/cron/ 这个目录的权限是 755,属于root用户和root组,我用非root的用户执行 crontab 命令竟然能在改目录下增删文件。

20160412 加:不奇怪了,原因找到了,是因为 /bin/crontab 拥有 setuid 的权限,而/bin/crontab 的所有者是 root,所以当我以非root用户执行 crontab 命令的时候,我就临时成为了root。

 

我们在这里不使用 crontab 来修改 /var/spool/cron/ 中的文件,我们直接将配置文件放到 /etc/cron.d/ 这个目录中。

来一个小示例:

sudo vim /etc/cron.d/mycrontab

文件的内容填入(该配置的意思是 每分钟以 root 用户的身份执行一次 touch /tmp/testfile 这条命令):

* * * * * root touch /tmp/testfile

然后保存。

启动 crond 的 daemon:

sudo systemctl start conie.service

看看是不是 /tmp/testfile 这个文件被建立了,然后访问时间每分钟都改变。

 

对于配置文件的具体应该如何编写,可以查看 man 5 crontab。

posted @ 2016-03-29 14:59  张不正  阅读(2379)  评论(0编辑  收藏  举报
返回顶部