之前只是知道有crontab这么个东西,并且也是刚刚开始学习linux系统,哈哈

经过一个晚上的摸索有如下心得

1:ubuntu下默认的没有/etc/cron.allow和/etc/cron.deny,注意这个路径的是/etc/下的,网上有很多说是其他的路径,可能是linux发行版本不同的缘故ubuntu的路径就是如此

2:ubuntu下如果上边两个文件都不存在,默认的是所有的用户都可以使用crontab程序,可能有其他的发行版不是如此默认的

3:首先通过设置root的crontab看看它是否能够执行 方法:
su root
然后输入密码,进入到root登录状态
crontab -e 编写root的crontab 内容设置为 
* * * * * echo"root crontab test" >>/tmp/test.txt
观察运行的情况
4: 对于非root用户可以执行的命令或者程序,必须有相应的权限,我刚一开始是编写的root的crontab内容是

*/2 * * * * /sbin/reboot

这个crontab的意思是每过两分钟机器重启,是完全可以执行的

但是我放置非root用户user1中的crontab程序中是不能正确执行的,因为user1没有执行/sbin/reboot的权限

即使加上sudo 即sudo /sbin/reboot也不可以

PS:郁闷的狠啊,因为是用的上边的测试方法,刚一开始没有想到是执行权限的问题,我还以为是user1根本就不能执行crontab程序呢,因为当时也不知道可以通过* * * * * echo "test" >>/tmp/test.txt进行测试,就一直在重复的实验是否是cron.allow和cron.deny的问题,搞了好久

5:在确定了root和非root用户都可以执行crontab程序之后,我又测试了root 的crontab,内容如下

* * * * * /sbin/firefox 意思是crontab进行每次进行检测时都会打开firefox的浏览器,因为我用* ** * * /sbin/reboot可以正确执行,而上边的firefox则不会打开,按照道理说会是打开的!
着一个又把我郁闷了好久,最终找到了原因是firefox是个gui的程序,如果要打开gui的窗口时候,需要exportDISPLAY=:0 具体如下:
* * * * * export DISPLAY=:0 &&/sbin/firefox,这样就可以了

同样如果是用户非root, 执行gui的程序也需要加上 export DISPLAY=:0才能显示gui的界面,当然用户的路径要用绝对路径(刚开始对路经的问题,研究了好久!),比如你装上了网页编辑工具bluefish,默认的程序的执行的路径是 /usr/bin/bluefish那么在user1中的crontab程序可以这样写
* * * * * export DISPLAY=:0 &&/usr/bin/bluefish 这样crontab就可以运行了

6:有的时候设置了crontab的时候,程序好像是不能执行,最好是重新启动一下cron进行
方法  sudo /etc/init.d/cron stop;/etc/init.d/cronstart 这样就应该没有问题了 sudo service cron restart

7:有时候在你执行crontab-e的时候如果你是第一次执行这个命令,那么它会让你选择编辑器,如果你选择了之后想更改编辑器的时候可以用 sudoupdate-alternatives --config editor 这样再重新选择编辑器,重新再选择就好了

搞了一个通宵,今天做下记录,备忘,好累,不过很兴奋学到了很多东西!
Logo

更多推荐