在linux下有两种方法来让一个命令或者脚本执行:

crontab : 执行一个任务一次或者多次.
at : 只执行一次.
crontab是通过读取一个crontab文件来工作,这是一个普通的文本文件,里面列出了要执行的任务。每行都含有要指定的任务的命令、参数与选项,以及要执行任务的时间。(cron 软件在后台运行并且经常检查 /etc/crontab 文件。cron 软件也检查 /var/cron/tabs 目录,搜索新的 crontab 文件。这些 crontab 文件存储一些 cron 在特定时间执行任务的信息。)

crontab的基本格式:

* * * * * command

几个星号分别为:分 时 日 月 周,最后是要执行的命令。
分:0~59
时:0~23
日:1~31
月:1~12
周:0~6(0表示星期天)
除了数字还有几个个特殊的符号就是* / – :
* 代表所有的取值范围内的数字
/ 代表每的意思
*/5 表示每5个单位
– 代表从某个数字到某个数字
, 分开几个离散的数字

配置文件的一些例子:
0 3 * * * /root/test.sh 每天凌晨3点执行test.sh文件
* 23-7/1 * * * /root/lnmp restart 晚上11点到早上7点之间,每隔一小时重启lnmp套件
*/30 * * * * /usr/sbin/ntpdate 每半小时同步一下时间
0 23 * * 6 /lnmp restart 每星期六的11 : 00 pm重启重启lnmp套件。
*/1 * * * * echo “i am running.”>>/tmp/running.txt 每隔1分钟向/tmp/running.txt写一个”i am running.”字符串。
运行
我以为编辑crontab保存后会自动执行,其实不然,必须通过重启cron才可以,命令如下:
启动/etc/init.d/cron start
关闭/etc/init.d/cron stop
重启/etc/init.d/cron restart

我的想法很天真,如果保存后就能立即自动运行,想想是多么可怕的事啊,但我就在这样的问题上费了半个小时来测试为什么保存后不能运行的问题上!

PS:重点理解斜线(/):

有同学把斜线(/)理解成除法,但这会产生误会。一般斜线(/)与*或-一起使用,而*/n也可以看做是a-b/n的省略写法,只是a和b是*表示的范围起始值。

那么a-b/n可以理解为从a开始执行,每隔n就会执行,直到b,而b之不执行要看a+n*倍数是否等于b了。例如:

0 */6 * * * #表示每天00:00,6:00,12:00,18:00

0 3 */3 * * #表示1、4、7、10、13、16、19、22、25、28(、31)日的03:00


一定不要把斜线(/)理解成除法,不然你会遇到麻烦。(范围从0开始的可以简单理解除法,自己想想为什么?)

Related Posts

发表评论