How to control ubuntu by using crontab

cron是一个Linux下的后台进程,用来定期的执行一些任务。我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效,但其他系统应该也差不多。

第一步:编写一个你想执行的bash脚本

vim test.sh

1
2
#!/bin/bash
echo success!

第二步:设置定时执行bash脚本的bash脚本

编辑crontab文件

sudo vim /etc/crontab

在其中添加

1
* * * * * root bash /home/tony/test.sh > /home/tony/log
前面的五个*代表不同的意思

前5个*分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:

意义 范围
分钟 0 - 59
小时 0 - 23
1 - 31
1 - 12
星期 0 - 6 (0表示星期天)

root代表执行用户,有时候,发现命令没有按时执行,可将root换成你当前的用户名,如ubuntu或者tony,bash /home/tony/test.sh > /home/tony/log为具体执行的命令。

举些例子:

1
2
3
4
* * * * *                  # 每隔一分钟执行一次任务
0 * * * * # 每小时的0点执行一次任务,比如6:00,10:00
6,10 * 2 * * # 每个月2号,每小时的6分和10分执行一次任务
*/3,*/5 * * * * # 每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06
|名称 |解释| |:----|:--| |星号|表示任意值,比如在小时部分填写 * 代表任意小时(每小时)| |逗号|可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3 表示一分钟或三分钟| |斜线 /|一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 */2 代表每隔两分钟。
所以 */1 和 * 没有区别。*/2 可以看成是能被2整除的任意值。|

更多例子:

1
2
3
4
5
6
7
a. 30 21 * * * /usr/local/etc/rc.d/lighttpd restart // 表示每天21:30重启apache 
b. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart // 表示每月1,10,22号
4:45重启apache
c. 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart // 表示每天18:00至23:00之间每隔30分钟重启apache
d. * */1 * * * /usr/local/etc/rc.d/lighttpd restart // 表示每一小时重启apache
e. */5 * * * * /usr/local/etc/rc.d/lighttpd restart // 表示每5分钟重启apache
f. 0 6 * * * echo "Good morning." >> /tmp/test.txt // 注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都写入了 /tmp/test.txt 中

需要注意

如果发现crontab脚本没有按时执行,可以将root换成ubuntu。

重启crontab服务

可以分为两种情况:

1.在系统中有service这个命令时:这个命令在red hat当中常用,有的linux发行版本中没有这个命令.

1
2
3
$ service crond start //启动服务
$ service crond stop //关闭服务
$ service crond restart //重启服务

2.linux发行版本没有service这个命令时:

1
2
3
4
5
/etc/init.d/cron stop
/etc/init.d/cron start
或者
/etc/init.d/crond stop
/etc/init.d/crond start


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!