如何在crontab中添加条目?


13

我是第一次使用crontab。想要编写一些非常简单的测试cron任务,然后运行它们。

$crontab * * * * * echo "Hi"

什么都不会产生

crontab */1 * * * * echo "hi"

*/1: No such file or directory

另外,如何列出当前正在运行的cron任务(不仅是我拥有的任务,还包括其他用户(例如root)启动的任务)。

以及如何删除特定的cron任务?


有关如何编辑和创建cron作业的说明以及文件结构的说明,请参阅此crontab语法指南
KJS 2012年

Answers:


21

你不能那样使用crontab。使用man crontab阅读有关调用此实用程序的正确方法。

您将要用来crontab -e编辑当前用户的cron条目(可以添加/修改/删除行)。用crontab -l看的配置任务的当前列表。

至于查看其他用户的crontab,如果没有默认安装的root用户,这是不可能的。请参阅“ 如何为所有用户列出所有cron作业”以某些方式列出所有内容(以root 用户身份)。

注:要非常小心,当你在命令行(在使用shell的通配符*?特别)。*将被扩展到当前目录中的文件列表,这可能会产生意想不到的效果。如果要*作为参数传递给某物,请用引号('*')引用。


所以我做了crontab -e,并在编辑器中输入了* / 1 * * * * echo“ hi”,当我保存此文件时,我看到了crontab消息:安装新的crontab。但我没有在屏幕上看到喜讯。我现在想念什么?谢谢。
xyz

2
crontab的输出将永远不会进入您的“屏幕”。在crontab的POSIX手册页中:“如果标准输出和标准错误未通过crontab条目中执行的命令重定向,则任何生成的输出或错误将通过实现相关的方法邮寄给用户。”

1
作业的输出将发送到作业所有者的本地邮箱。(mail如果已配置,则从命令行运行应该访问您的本地邮箱。)要在图形环境中查看“ hi”,可以将任务设置为:* * * * * export DISPLAY=:0; xmessage 'hi'
manatwork 2011年

@manatwork您可能还需要XAUTHORITY,这可能并不容易
derobert 2012年

7

有两种编辑方式crontab

  1. 使用进行交互,crontab -e这将crontab$VISUAL或指定的编辑器中打开$EDITOR,或

  2. 非交互式地,使用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.txtcrontab.txt然后,该文件替换当前的crontab。


2

如果要交互式修改crontab,请运行命令crontab -e,不带其他选项。这将在crontab副本上启动编辑器。退出编辑器时,编辑后的副本将成为新的crontab。您可以通过VISUALEDITOR环境变量控制启动哪个编辑器。要列出您的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

2

这有点晚了,但是对于其他在这里找的人。除了使用VISUAL和操纵输入/输出流之外,还有其他更简单的方法EDITOR

您可以简单地将cron计划写入文件中,每行1个作业,然后使用命令,crontab [filename]这样您就可以cat将作业filename作为脚本的一部分,然后根据需要最终在最后调用crontab。

实际上,这是最常见的用法man crontab首先列出它是提示


2

如果您希望crontab通过自动化或通过命令行将条目添加到中,则可以(设置希望的时间)

echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)

然后:

service crond reload

重新加载crontab。


这是不可移植的。并非所有的Unix都将crontab文件存储在下/var/spool/cron。更好的方法是通过crontab(1)命令。
thrig

这可能是真的,但它表明你如何原理做到这一点的系统上,是的,crontab中的伎俩,如果你想通过行添加一行。这并不是绝对的答案,而是一个答案,如果您知道自己的位置,并且需要大量添加。拿它是什么。
克里斯·斯普鲁斯菲尔德

1

使用以下命令尝试:

crontab -e 

然后添加您的cron作业:

*/1 * * * * echo "hi"

在那个文件中。


0

我想强调一下我在下面描述的方式,尽管之前在另一条评论中已经提到过。在将条目添加到文件然后将文件添加到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

关于每个条目的简要说明:

  • 此crontab条目写着“ Hello world!”。/home/user/greeting.txt每天上午9点进入文件。
    • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 此crontab执行一个Python文件,该文件在命令行“ Hello world!”中打印。每天上午9点。
    • 0 09 * * * python /home/user/greeting.py
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.