利用CRONTAB自动定时执行任务(ARM-LINUX),crontabarm-linux


本人的项目中,应为系统的需要,需要在嵌入式环境下,实现开机自启动定时运行脚本/程序,以实现自动化。一开始是利用while 循环与 sleep 实现定时执行命令,而在了解到crond这一机制后,发现自己的嵌入式平台所搭载的Angstrom系统中也支持crontab功能,于是对其进行探究。


首先,关于什么是crontab?

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。


如何编辑、利用crontab的功能?

 如要将crontab应用于当前用户,使用命令crontab -e,即可进入crontab的编辑界面。其基本格式如下:

 * * * * *cmd

 上述5个*分别代表分、时、天、周、月,默认情况下*即代表每一/分/时/天/周/月,也可以用*/x表示每x分/时/天/周/月。


附:个别实例

 examle 1:每1分钟执行一次command

 命令:

 * * * * * command

 examp2:每小时的第3和第15分钟执行

 命令:

 3,15 * * * * command

 example3:在上午8点到11点的第3和第15分钟执行

 命令: 

 3,15 8-11 * * * command

 example4:每隔两天的上午8点到11点的第3和第15分钟执行

 命令:

 3,15 8-11 */2 * * command

 example5:每个星期一的上午8点到11点的第3和第15分钟执行

 命令:

 3,15 8-11 * * 1 command

 example6:每晚的21:30重启smb

 命令:

 30 21 * * * /etc/init.d/smb restart

 example7:每月1、10、22日的4 : 45重启smb

 命令:

 45 4 1,10,22 * * /etc/init.d/smb restart

 example8:每周六、周日的1 : 10重启smb

 命令:

 10 1 * * 6,0 /etc/init.d/smb restart

 example9:每天18 : 00至23 : 00之间每隔30分钟重启smb

 命令:

 0,30 18-23 * * * /etc/init.d/smb restart

 example10:每星期六的晚上11 : 00pm重启smb

 命令:

 0 23 * * 6 /etc/init.d/smb restart

 example11:每一小时重启smb

 命令:

 * */1 * * * /etc/init.d/smb restart

 example12:晚上11点到早上7点之间,每隔一小时重启smb

 命令:

 * 23-7/1 * * * /etc/init.d/smb restart

 example13:每月的4号与每周一到周三的11点重启smb

 命令:

 0 11 4 * mon-wed /etc/init.d/smb restart

 example14:一月一号的4点重启smb

 命令:

 0 4 1 jan * /etc/init.d/smb restart

 example15:每小时执行/etc/cron.hourly目录内的脚本

命令:

 01   *   *  *   *    root run-parts /etc/cron.hourly【1】

 

若在规划时间执行命令,crond会自动向用户邮箱发送一份记录。也可以自己定义一个日志文件,让其输出到该文件上。

具体方法为,在命令后加空格 >> filepath/filename

如* * * * * ntpdate 192.168.30.31 >> /home/root/cron_log.txt



注意事项:

   若命令不能顺利执行成功,可能是因为环境变量的问题,如本人先前试图以如下方式执行脚本:

   0*/2 * * * /home/root/BBB_WORK/CMD-TRANSMIT-2H.sh

   但失败了,于是修改为:

   0*/2 * * * /bin/sh /home/root/BBB_WORK/CMD-TRANSMIT-2H.sh即可!

  特别注意!脚本的执行环境默认为当前用户目录,比如为用户root,则在执行脚本时,如在本机环境下,即会将当前目录当做 /home/root,因此,若涉及其他目录的操作,应该相应做出调整。(本人在脚本中利用cd命令进行切换目录)

 

   参考资料:

 【1】https://www.cnblogs.com/peida/archive/2013/01/08/2850483.html




相关内容