crond(cron) 和 crontab

参考:

1、鸟哥:http://vbird.dic.ksu.edu.tw/linux_basic/0430cron.php

2、Ubuntu官方:https://help.ubuntu.com/community/CronHowto

一、shell命令

1、>和>>都是重定向输出
     1> 指标准信息输出路径(也就是默认的输出方式)
     2> 指错误信息输出路径
     2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)

2、标准输入(standard input)的文件描述符是 0
     标准输出(standard output)是 1
     标准错误(standard error)是 2

二、crond

1、crond是一个服务,一个守护进程。crond 是linux用来定期执行程序的命令,crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

2、crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。

总结,就是crond会根据crontab中设置的命令,然后执行自己想做的事情。


按照网上查找的资料执行时经常会碰到这种错误:

crontab: chdir(/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进程已经启动!

三、若在写入shell,然后做一个重启的动作:

可以在rcS中先让crond执行,即在rcS中写入此行。

然后在shell中写入:mkdir -p /var/spool/cron/crontabs,创建一个目录。

假如我的用户名为Linux,然后在shell里写入:echo "0 0 * * *  /bin/myrestart" >/var/spool/cron/crontabs/linux。

最后更改一下权限。

这样就好了, 机器就睡会到凌晨重启。

四、【问题】

实践中发现问题如下:

在主机端开发板NFS目录下var里新建的文件夹在开发板的/var下面查看,并未找到文件夹,同样在开发板端/var目录下新建的文件夹或者文件,在主机端也没有出现,最后感谢王师傅,得到了解决方案与原因:

【原因】

var下面很多文件一直在刷新,电脑硬盘无所谓,嵌入式存储用的flash,擦写多了严重影响寿命,所以var目录下的内容实际为内存虚拟的,并不存在与flash之中。


【解决方案】

在开发板/etc/crontabs/下建立crontab的配置文件root:

* * * * * /myupdate/update


每分钟执行update一次

然后在/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,重启生效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章