有没有方便的命令行工具来管理 Cron 作业?

有没有方便的命令行工具来管理 Cron 作业?

有人会建议任何方便的命令行(非网络)工具或脚本来添加、启用和禁用 Cron 作业吗?例如,我正在寻找以下(或类似)行为:

sh manageCron.sh -idJob 'job1' -addJob '* * * * * <do some job>'
sh manageCron.sh -dissableJob 'job1' 

crontab -e 命令适合手动编辑 crontab 文件,但我需要自动化。

答案1

crontab -u USER -l将把 crontab 列出到 STDOUT。

crontab -u USER FILE将为用户加载 FILE 作为 crontab。

现在唯一缺少的是一种识别你的“工作”的方法。

“AddJob”将在当前 crontab 的输出中添加一行并将其读取为新的 crontab。

“DisableJob”只会在您的工作行前面添加一条评论,

“EnableJob”将从您的工作行中删除评论。

答案2

这是我之前用来管理、自动化 crontab 的一个,但并不是真正像你正在寻找的东西。http://search.cpan.org/~scottw/Config-Crontab-1.33/Crontab.pm

CFEngine 的 cfperl 具有这种行为,可以用来构建您所要求的东西。 Crontab 实际上是一个简单的配置文件,然后 cron(d) 解析各个 crontab(或 /var/spool/cron/ 下的 crontab)并在内存中安排事件列表。

因此,如果您正在寻找通过简单的 cron 的 crontab 再次包装您的配置,那么您可能不是在寻找 cron,而是在寻找其他一些会触发您的作业的调度程序。

答案3

我不知道是否有一个应用程序可以“自动”维护 crontab。我所做的就是保留一个“主”crontab,对其进行编辑,然后使用crontab ~/etc/app.cron或类似的东西。然后就很容易创建一些东西来自动修改 ~/etc/app.cron 了。

对于您想要的命名作业,您要么必须创建一个包含作业名称的小型数据库,要么将作业名称添加到 crontab 行末尾的结构化注释中。

答案4

您可以使用 自动化 cron 作业crontab -e。由于crontab -e调用由 指定的编辑器$VISUAL,或者$EDITOR如果VISUAL未设置,则将某些脚本指定为$VISUAL

script=$(mktemp)
cat <<'EOF' >"$script"
#!/usr/bin/ed -s
1,$/#job1$/d
$a
1 2 3 4 5 new job #job2
.
w
q
EOF
VISUAL="$script" crontab -e
rm -f "$script"

工作名称没有内在的概念;您可以通过#jobname在每行末尾添加注释来轻松组成一个注释,如上例所示。

相反crontab -e,您可能会发现更容易转储当前文件,编辑它并安装新版本或者保留主副本并在更改时安装它。使用主副本意味着您不能通过其他方式编辑 crontab,否则您的更改将被覆盖。转储当前文件并编辑它意味着,如果某个东西或其他人同时编辑 crontab,那么先安装的人将被覆盖他们的更改;某些版本crontab通过在运行时锁定文件来防止这种情况发生crontab -e,但我不知道 Solaris 是否会这样做。

相关内容