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.txt0 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.txt0 09 * * * python /home/user/greeting.py