有人会建议任何方便的命令行(非网络)工具或脚本来添加、启用和禁用 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 是否会这样做。