1、已经在 /etc/crontab 文件中,写入以下代码:
*/1 * * * * glen /home/glen/sphinx/build_delta_index.sh > /dev/null 2>&1
*/5 * * * * glen /home/glen/sphinx/build_merge_index.sh > /dev/null 2>&1
30 2 * * * glen /home/glen/sphinx/build_main_index.sh > /dev/null 2>&1
2、su 到 root 用户下执行下面命令:crontab -l, 无内容,是否当前 cron 并没有执行到 crontab 文件中的配置 ;
正常情况是有内容的?搞不明白。
3、我有记录 shell 的输出重定向,有输出。
请问各位大大,如何解决?
亲,你的用法就是不对的。直接一点的方法就是编辑 /etc/crontab。你在里面 加入你要执行的命令。但是这个不安全,所以 crontab 为每一个用户都提供了 crontab,你可以不使用 root 密码就编辑它。当然它无法执行需要 root 权限的 crontab。你可以在自己登录的情况下不用 root 直接运行
crontab -e
就会进入自己的 crontab,输入你要添加的内容,然后
crontab -l
就可以列出你添加的内容了。当然是列出你自己添加的 crontab ,别人也可以在账户下添加自己的 crontab 但是这里就不会别列出。
你 su 以后就成了 root 账户,但是 /etc/crontab 也不是 root 账户 crontab,所以不会被列出。你 su 以后再
crontab -e
编辑的才是 root 的 crontab,添加了你要的内容后在 root 账户下
crontab -l
才会别列出。/etc/crontab 更像是一个系统的 crontab ,所有账户登录都可以运行。当然你直接添加到 /etc/crontab 也是不错的,可以达到目的但是一般不推荐这样做。
PS1: 你编辑的 crontab 事实上是保存在 /var/spool/cron/tabs 这个文件夹里的,你没有运行过 crontab -e 里面就是空的,你用 root 运行一下,什么都不编辑直接保存 里面就会多一个叫 root 文件,当然你用其它账户也一样。
PS2: 是 openSUSE 和 SuSE ,没有 OpenSuSE , 我帮你改回来的。
感谢上楼,有用,最后问问,是否通过 crontab -e 编辑的文件保存到 /var/spool/cron/tabs 中后,重启计算机后是否仍然有效?
理论上是存在的,我没有拿真的例子实验过,但是 crontab 实际是这样子工作的。它有一个参数是用来指定编辑的文件的,
crontab cronfile
复杂一点的流程是这样的,你用随便什么编辑一个符合格式的文件到随便什么地方,然后 crontab 这个文件 ,那么 crontab 就会创建一个副本到 /var/spool/cron/tabs 这个文件夹里,比如我在当前工作目录下创建了一个 crontab 文件,然后再
crontab ./cronfile
再运行
crontab -l
你会看到这样一行内容
这时候重启,无疑两个文件都在。
简单一点的, 你不自己创建文件而是直接
crontab -e
那么你编辑的文件就会在 /tmp 里,你会看到
那里的文件是会被清除的,但是副本会仍然存在。也就是 /var/spool/cron/tabs 里的文件会依然存在,你运行依然会有效。
那么复杂的流程有什么用呢?你可以有一份自己常用的 crontab 文件可以备份可以带到任何一台电脑上然后 crontab 一下他就可以了。你还可以和要好的小伙伴分享自己的 crontab 文件。这一切都不需要 root 权限。而如果你要动 /var/spool/cron/tabs 里的文件那是要 root 的。当然 crontab -e 通过一种方法也可以办到,说出来就有点简单了。crontab -e 使 用的默认编辑器是 vim ,所以,你要保存一份自己 crontab 只有用 vim
/w 你想要保存的文件
就可以跳过上面复杂的步骤 了。
我突然发现在 crontab -e 的任务无执行,只有在 /etc/crontab 文件写的任务才能执行,这是为什么?按道理应该可以执行才对?
确保你要执行的命令是不需要 root 的,如果你是自己家里自己用,直接写在 /etc/crontab 也没有什么关系。
不需要用 root,命令在普通用户下没有问题,我的 tabs 目录下一个建立两个 root、glen(普通用户)都没有反应。感觉应该是没有把文件的配置运行到 cron。
我的环境是 openSUSE 12.3,会不会是这个版本 cron 的本身有问题。
哦,我知道了,你的那个配置文件写错了。/etc/crontab 和用户的 crontab 是有一些区别的。/etc/crontab 需要指定身份,而用户的 crontab 不需要指定身份。如果你写到 /etc/crontab 就像你上面写的
如果是 crontab -e 的话要把中间的身份去掉,像这样
我自己用其它指令实验过了,没有问题。
另外推荐看看 鸟哥 ](http://linux.vbird.org/linux_basic/0430cron.php#etc_crontab)
再有,再次纠正一下,是 SuSE 和 openSUSE。。。。好吧,我有一点点强迫症。。。但是写正确自己发行版的名字还是好一点。。。