我的系统环境是: Ubuntu 910
其他的发行版没有测试。
有时候,明明是 crontab -e 编辑了,但是后面的命令却执行不起来。这可能是因为,你的命令可能不在标准路径里;或者尝试执行一个图形界面的程序,而执行图形界面的程序会由于初始化 GTK 的失败而无法启动。
现在假设在普通用户下执行 crontab 命令,而且有一个程序叫 crontab_test ,存在 /home/beyes/programming/crontab 目录下。crontab_test 程序的目的是简单的往一个文件上写入 hello 字符串,一行一串。程序代码如下:
[Plain Text] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
if ((fp = fopen("crontab_test.txt", "a+")) == NULL) {
perror ("crontab_test.txt failed");
exit (1);
}
fwrite ("hello\n", 6, 1, fp);
fclose (fp);
return (0);
}
现在用 crontab -e 命令来编辑 crontab 计划任务:46 9 * * * (cd /home/beyes/programming/crontab; ./crontab_test) 注意,为了简明起见,上面使用了括包,把这些命令括起来;为了执行非标准路径下的程序,我们要先 cd 进程序所在的目录,然后再执行程序。
上面表示任何一天中的 9 点 46 分都会执行这个程序,现在来看一下是否生成了 crontab_test.txt 文件:beyes@beyes-groad:~/programming/crontab$ ls
crontab_test crontab_test.c crontab_test.txt test.sh 好,正确生成:$ cat crontab_test.txt
hello
因为是试验用,删除掉计划任务,使用命令:
题外话,如果想一次不断的循环调用程序的输出以连续观察结果,可以在当前目录下写一个脚本来调用程序:#!/bin/sh
while true
do
./crontab_test
sleep 5
done 那么这时,crontab 中的计划要写成:46 9 * * * (cd /home/beyes/programming/crontab; sh test.sh)
当然,如果只是想在一个文本里每次一行的输入 hello 字符串,大可不必写一个 C 程序,只用简单的脚本即可:#!/bin/sh
while true
do
echo hello >> crontab_test.txt
sleep 5
done 注意上面,echo 后面用的是 >> 符号,而不是 > 符号。
> 符号是简单的把要写入的内容导入到 crontab_test.txt 文件中,但是循环输出时,每次会被覆盖。
>> 符号是把写入的内容追加到后面的文件中。
关于 cron , crontab 以及另外一个计划工具 anacrontab 的说明分别可见:
http://www.groad.net/bbs/read.ph ... ; (让一个脚本自动定时运行,设置、启动 linux定时脚本 (crontab详解))
http://www.groad.net/bbs/read.php?tid-1458.html (使用 Anacron 处理 Linux 关机问题)
如果希望简单的执行一个图形界面的程序,比如电驴,BT 等下载软件,可以参考我写的一个简单的计划工具:
http://www.groad.net/bbs/read.php?tid-1246.html (计划工具)
像图形界面的启动,crontab 路径的问题,有几个试验没有去测试,不知道是不是用 cron 本身就可以很方便的去实现这些功能。 |