1. 前言
限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。^_^
2. 什么是 cron ?
Windows系统下的计划任务工具,可以让用户指定在特定的条件下(如某个指定时间),执行指定的任务。cron就是Ubuntu下的计划任务工具。
3. cron工作原理
cron搜寻目录
/var/spool/cron/crontabs
/etc/cron.d/xxx
然后加载目录下文件,以每分钟为周期,通过检验文件的modtime或inotify通知,确认是否要执行该任务,因此在修改计划任务文件后,不需要重启cron服务。计划任务的输出可以 MAILTO 或 通过 -s 选项发送到 syslog。
目录 /var/spool/cron/crontabs 下的为每用户的任务。
4. 编辑用户特定的任务
crontab -e
在弹出的编辑界面编辑:
* * * * * echo "Hello, World!" >> /tmp/cron-test.txt
假设当前用户名为 test , 则在目录 /var/spool/cron/crontabs 下
生成文件 /var/spool/cron/crontabs/test , 其内容为:
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# ......
* * * * * echo "Hello, World!" >> /tmp/cron-test.txt
过几分钟后,会看到系统生成了文件: /tmp/cron-test.txt
其内容为:
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
......
5. 实例
我是个实际主义者,如果花时间去学习一样的东西,不是为了实际应用,我认为是不值得的,毕竟人的时间精力有限,也没有比时间更宝贵的东西了。
有时候,我们的服务器会因为某些意外原因而宕机(譬如停电),然后再也无法启动,此时如果数据硬盘损坏,就能造成损失。因为,我们公司的代码服务器上,通过cron设定了计划任务,用于定期将代码备份到远程的数据备份服务器上,避免这种意外带来的数据丢失。
6. cron服务相关目录和文件
/etc/cron.d/
/var/spool/cron
/etc/cron.allow
/etc/cron.deny
/usr/sbin/cron -f
/etc/init.d/cron -- cron service {start, restart, stop} 脚本
/etc/crontab -- system-wide crontab
/etc/cron.d
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
7. cron的更多使用方法
man cron
man crontab