参考:https://www.linuxidc.com/Linux/2014-02/97369.htm
http://www.linuxidc.com/Linux/2014-02/97360.htm
https://blog.csdn.net/xinyflove/article/details/83178876
crond是一个服务,一个守护进程。crond 是linux用来定期执行程序的命令,crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
执行 crontab -l 等操作时,经常会碰到这种错误:
crontab: can’t change directory to ‘/var/spool/cron/crontabs’: No such file or directory
所以首先创建这样一个目录吧!
#mkdir -p /var/spool/cron/crontabs
然后编辑要执行的任务
#crontabs -e
0 */1 * * * /sbin/ntpdate 192.168.1.67 >/dev/null 2>&1 每隔一个小时更新下时间,不打印任何信息
最后,执行下
#crond
此时你会发现/var/spool/cron/crontabs下有一个跟用户名相同的文件,保存着要执行的任务。
ps下会发现cron进程已经启动!
【问题】
var下面很多文件一直在刷新,电脑硬盘无所谓,嵌入式存储用的flash,擦写多了严重影响寿命,所以var目录下的内容实际为内存虚拟的,并不存在与flash之中。
在板子上使用crond去定时执行某个程序或命令,首先建立crontab表。
【解决方案】
在开发板(zlg-imx6ull)/opt/ 下建立crontab的配置文件root:
#mkdir -p /opt/crontabs
vi /opt/crontabs/root (目录根据实际新建, 需要注意的是文件名以用户名命名)
例如,在板子的/opt/crontabs/root文件中设置每分钟打印hello及每2分钟打印world, root内容如下:
* * * * * /bin/echo "hello"
*/2 * * * * /bin/echo "world"
* * * * * /bin/echo "hello" >> /opt/crond-log.txt //可以将信息输入到某个文件中
保存后,执行以下命令启动cront服务,在前台执行
crond -f -c /opt/crontabs/ //前台执行
crond -c /opt/crontabs/ //默认后台执行, 不打印信息
然后在/etc/init.d/rcS修改,让开发板每次启动之后自动执行:
mkdir -p /var/spool/cron/crontabs#guoshufanADD
cp -p /etc/crontabs/root /var/spool/cron/crontabs#guoshufanADD
chmod 777 /var/spool/cron/crontabs/root#guoshufanADD
crond#guoshufanADD
echo "cp cron config file to /var/spool/cron/crontabs"#guohufanADD
即新建crontab配置文件目录,然后将配置文件按拷贝至新建目录下,完美解决问题,不过要记得执行chmod命令,以后只需要修改root中的内容就可以改变crontab配置,不过临时修改配置还是需要去/var/spool/cron/crontabs内的rooot文件,永久修改是修改/etc/crontabs/root,重启生效。
crontab语法规则:
1.每分钟定时执行一次规则:
每1分钟执行: */1 * * * *或者* * * * *
每5分钟执行: */5 * * * *
2.每小时定时执行一次规则:
每小时执行: 0 * * * *或者0 */1 * * *
每天上午7点执行:0 7 * * *
每天上午7点10分执行:10 7 * * *
3.每天定时执行一次规则:
每天执行 0 0 * * *
4.每周定时执行一次规则:
每周执行 0 0 * * 0
5.每月定时执行一次规则:
每月执行 0 0 1 * *
6.每年定时执行一次规则:
每年执行 0 0 1 1 *
7.其他例子
5 * * * * 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令 [注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令 [注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令 [注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令 [即每月的1、11、21、31日是的6:30执行一次ls命令。 ]