Linux 定时任务crontab
项目上一次问题的处理需要在Linux上做一些定时任务,比如定时清空日志来释放硬盘空间,避免出现项目出现一些未知的错误.
接下来小弱鸡就开始研究 crontab
其实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了。
关于cron任务计划功能的操作都是通过crontab这个命令来完成的。其中常用的选项有:
-u :指定某个用户,不加-u选项则为当前用户;
-e :制定计划任务;
-l :列出计划任务;
-r :删除计划任务。
首次使用 crontab 命令会出现选择编辑器,选的编辑器不会用可以用 命令 select-editor 来重新选择. 不怕笑话,我第一次默认选择的是 nano 不会用 又换成了 vim
crontab -e 制定计划任务
01 10 05 06 3 echo "ok" > /root/cron.log
每个字段的数字分表表示什么呢?从左到右,依次为:分,时,日,月,周,命令行。而上面的例子的含义是:在6月5日(这一天必须是星期3)的10点01分执行命令 echo "ok" > /root/cron.log
crontab -e 实际上是打开了 “/var/spool/cron/username” (如果是root则打开的是/var/spool/cron/root)这个文件。使用的是vim编辑器,所以要保存的话则在命令模式下输入:wq即可。但是,你千万不要直接去编辑那个文件,因为可能会出错,所以一定要使用 crontab -e
来编辑。查看已经设定的任务计划使用 crontab -l
命令:
[root@localhost ~]# crontab -l
01 10 05 06 3 echo "ok" > /root/cron.log
删除计划任务要用 crontab -r
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
cron的内容不算太难,但是需要你牢固掌握,阿铭给出一些练习题,帮助你熟悉这个cron的应用。
- 每天凌晨1点20分清除/var/log/slow.log这个文件
- 每周日3点执行 “/bin/sh /usr/local/sbin/backup.sh”
- 每月14号4点10分执行 “/bin/sh /usr/local/sbin/backup_month.sh”
- 每隔8小时执行 “ntpdate time.windows.com”
- 每天的1点,12点,18点执行 “/bin/sh /usr/local/sbin/test.sh”
- 每天的9点到18点执行 “/bin/sh /usr/local/sbin/test2.sh”
习题答案:
1. 20 1 * * * echo "" >/var/log/slow.log
2. 0 3 * * 0 /bin/sh /usr/local/sbin/backup.sh
3. 10 4 14 * * /bin/sh /usr/local/sbin/backup_month.sh
4. 0 */8 * * * ntpdate time.windows.com
5. 0 1,12,18 * * /bin/sh /usr/local/sbin/test.sh
6. 0 9-18 * * * /bin/sh /usr/local/sbin/test2.sh
练习完上面的题目,相信你会有一些小疑问,这里要简单说一下,每隔8小时,就是用全部小时(0-23)去除以8,仔细想一下结果,其实算出来应该是0,8,16三个数。当遇到多个数(分钟、小时、月、周)例如第5题,则需要用逗号隔开。而时间段是可以用 n-m
的方式表示的,比如第六题中的(9-18)。等设置好了所有的计划任务后需要查看一下crond服务是否启动:
[root@localhost ~]# service crond status
crond (pid 945) 正在运行...
如果是停止状态,则需要启动它:
[root@localhost ~]# service crond status
crond 已停
[root@localhost ~]# service crond start
正在启动 crond: [确定]