我想在给定时间执行一次任务。
我知道我可以使用 crontab -e 将其添加到那里,但我想通过 shellscript 来做到这一点。crontab -e
给我一些临时文件来编辑,这是不可预测的。
另外,一旦任务执行,我想再次将其从 crontab 中删除,以确保它不会留下混乱。
那么有没有一种标准化的方法可以通过脚本在我的个人 crontab 中添加/删除条目?
我知道我可以推出自己的系统:有一个每分钟执行一次的脚本,该脚本从文件夹中执行和删除 .sh 文件,并让我的“addtask”脚本在该文件夹中创建 .sh 文件,但在推出我自己的系统之前,我想知道是否有已经是某事了。
如果重要的话,我使用 Mac OS X 和 zsh,但我想使用也可以在其他 *nix 上运行的东西。
答案1
我认为该at
命令就是您所追求的。
例如:
echo "mail -s Test mstumm < /etc/group" | at 16:30
/etc/group
这将在下午 4:30通过电子邮件向您发送一份副本。
您可以at
在这里阅读更多相关内容:http://www.softpanorama.org/Utilities/at.shtml
答案2
添加新的 cron 作业:
newJob="/path/to/new/script.sh"
newJobSchedule="0 0 * * 0 $newJob"
cat <(crontab -l) <(echo "$newJobSchedule") | crontab -
删除旧的 cron 作业:
oldJob="/path/to/old/script.sh"
cat <(fgrep -i -v "$oldJob" <(crontab -l)) | crontab -
替换过时的 cron 作业:
oldJob="/path/to/old/script.sh"
newJob="/path/to/new/script.sh"
newJobSchedule="0 0 * * 0 $newJob"
cat <(fgrep -i -v "$oldJob" <(crontab -l)) <(echo "$newJobSchedule") | crontab -
通过使用管道和重定向来避免临时文件。