Answers:
你不能那样使用crontab
。使用man crontab
阅读有关调用此实用程序的正确方法。
您将要用来crontab -e
编辑当前用户的cron条目(可以添加/修改/删除行)。用crontab -l
看的配置任务的当前列表。
至于查看其他用户的crontab,如果没有默认安装的root用户,这是不可能的。请参阅“ 如何为所有用户列出所有cron作业”以某些方式列出所有内容(以root 用户身份)。
注:要非常小心,当你在命令行(在使用shell的通配符*
和?
特别)。*
将被扩展到当前目录中的文件列表,这可能会产生意想不到的效果。如果要*
作为参数传递给某物,请用引号('*'
)引用。
mail
如果已配置,则从命令行运行应该访问您的本地邮箱。)要在图形环境中查看“ hi”,可以将任务设置为:* * * * * export DISPLAY=:0; xmessage 'hi'
。
有两种编辑方式crontab
:
使用进行交互,crontab -e
这将crontab
在$VISUAL
或指定的编辑器中打开$EDITOR
,或
非交互式地,使用crontab crontab.txt
,将crontab
仅从文件中导入条目crontab.txt
,从而为当前用户替换现有的活动crontab。
您遇到的问题是您只是在使用crontab
错误的命令。
以下是关于非交互式crontab操作的问题:
因此,要以编程方式删除特定任务,您可以执行以下操作
$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt
这里PATTERN
是一个正则表达式匹配,你想删除的任务(一个或多个)。在这里,crontab -l
将为您提供最新信息crontab
。
或者,如果您crontab-fragment.txt
要从活动crontab中删除的文件中有条目,
$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt
这将读取当前的crontab并过滤(删除)crontab-fragment.txt
当前目录中文件中也出现的任何行(使用全行字符串比较)。结果保存到该位置crontab.txt
,然后从那里加载以替换当前的crontab。
要添加一项或多项任务,请执行以下操作
$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt
假设文件crontab-fragment.txt
包含您要添加的条目。它读取当前的crontab,将条目追加crontab-fragment.txt
到此crontab 并创建crontab.txt
。crontab.txt
然后,该文件替换当前的crontab。
如果要交互式修改crontab,请运行命令crontab -e
,不带其他选项。这将在crontab副本上启动编辑器。退出编辑器时,编辑后的副本将成为新的crontab。您可以通过VISUAL
和EDITOR
环境变量控制启动哪个编辑器。要列出您的crontab,请运行crontab -l
。
如果要在脚本中修改crontab,请在脚本的路径或shell片段中设置,VISUAL
并将EDITOR
其设置为适当的位置,以修改提供的文件。在ed
这里,或者sed -i
如果您的实现sed
具有此选项,则可以使用编辑器。如果要无条件添加行,可以使用echo … >>
。小心报价;如有疑问,请编写脚本并将脚本名称传递为EDITOR
。
script=$(mktemp)
cat <<'EOF' >"$script"
#!/bin/sh
ed -s "$1" <<'EOS'
g/^ *[^= ][^ =]* *[^= ][^ =]* *[^= ][^ =]* *[^= ][^ =]* *[^= ][^ =]* *echo "hi"$/d
$a
* * * * * echo "hi"
.
w
q
EOS
EOF
这有点晚了,但是对于其他在这里找的人。除了使用VISUAL
和操纵输入/输出流之外,还有其他更简单的方法EDITOR
。
您可以简单地将cron计划写入文件中,每行1个作业,然后使用命令,crontab [filename]
这样您就可以cat
将作业filename
作为脚本的一部分,然后根据需要最终在最后调用crontab。
实际上,这是最常见的用法man crontab
,首先列出它是提示
如果您希望crontab
通过自动化或通过命令行将条目添加到中,则可以(设置希望的时间)
echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)
然后:
service crond reload
重新加载crontab。
/var/spool/cron
。更好的方法是通过crontab(1)
命令。
我想强调一下我在下面描述的方式,尽管之前在另一条评论中已经提到过。在将条目添加到文件然后将文件添加到crontab时,我发现它非常有用。该文件将包含下面的两个条目,文件名将为hello-world-crontab.txt
。
0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
0 09 * * * python /home/user/greeting.py
然后,我执行了以下命令,将这些条目添加到crontab中。
$ crontab hello-world-crontab.txt
下一步是验证是否已添加这些条目。
$ crontab -l
关于每个条目的简要说明:
/home/user/greeting.txt
每天上午9点进入文件。
0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
0 09 * * * python /home/user/greeting.py