如何向我的 crontab 添加条目?

如何向我的 crontab 添加条目?

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

$crontab * * * * * echo "Hi"

不产生任何东西。

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

*/1: No such file or directory

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

如何删除特定的 cron 任务?

答案1

你不能crontab这样使用。用于man crontab了解调用此实用程序的正确方法。

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

至于查看其他用户的 crontab,如果没有默认安装的 root 权限,这是不可能的。看如何列出所有用户的所有 cron 作业了解一些列出所有内容的方法(作为 root)。

注意:在命令行(尤其是)上使用 shell 通配符时要非常*小心?*将扩展到当前目录中的文件列表,这可能会产生意想不到的效果。如果您想将*其作为参数传递给某些内容,请引用它 ( '*')。

答案2

有两种编辑方法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.txt.然后该crontab.txt文件将替换当前的 crontab。

答案3

这有点晚了,但对于其他在这里看的人来说。有比使用 和 操作输入/输出流更简单的VISUAL方法EDITOR

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

事实上,这是最常见的用法,man crontab通过列出来作为提示第一的

答案4

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

如果要修改脚本中的 crontab,请将VISUAL和设置EDITOR为脚本的路径或修改所提供文件的 shell 片段的路径。编辑器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

相关内容