从脚本非交互地运行 crontab

从脚本非交互地运行 crontab

我想通过脚本在远程服务器上安排一些任务,但第一次使用 crontab 时,我遇到了一个问题,即需要以交互方式运行。据我所知,crontab 需要通过首次运行进行初始化crontab -e。这会导致它提示使用哪个编辑器并启动该编辑器。

我需要初始化 crontab 并在太多服务器上安排任务,无法单独登录每个服务器。有没有办法可以避免交互部分或编写脚本?

服务器和我的客户端正在运行 Ubuntu 13.04。

答案1

来自 StackOverflow:Linux - 如何通过脚本创建 crontab

Cron 任务通常存储在 /var/spool/cron 下的每个用户文件中

对您来说,最简单的事情可能就是创建一个配置了作业的文本文件,然后将其复制到 cron spool 文件夹并确保它具有正确的权限。

答案2

您可以不使用选项来编辑 crontab 的条目,-e如下所示。

#write out current crontab
crontab -l > mycron
#echo new cron into cron file
echo "<new crontab entry>" >> mycron
#install new cron file
crontab mycron
rm mycron

sed这对于通过脚本创建/编辑(使用)crontab 条目非常有效。

来源:堆栈溢出

答案3

我对 Linux Shell 脚本还不太熟悉,我发现 Brian 提到的 SO 帖子中的答案并不完整。它们提供了很大的帮助,并且提供了我需要的大部分信息,但我遇到了几个权限问题和通过 ssh 执行命令的问题。我的最终解决方案是:

cd ~/
echo "" > x
sudo cp ~/x /var/spool/cron/crontabs/myuser
sudo chown myuser:crontab /var/spool/cron/crontabs/myuser
echo "*/20 * * * * /path/to/myscript" > c
cat ~/c | crontab -

首先,我创建一个空的 crontab 文件,然后将权限更正为 crontab 所需的权限,然后将 cron 命令放在文件中,最后告诉 crontab 安排脚本。

有必要将 cron 命令添加到文件而不是使用 echo,因为我在通过 ssh 引用时遇到了问题。

答案4

对于复杂或大规模的作业调度,cron开始变得难以管理。在工作中,我使用企业(且昂贵)调度程序,这使管理我们的 300 多个作业变得轻而易举,但也有非常不错的免费解决方案。

我建议远离cron,特别是当你有太多服务器无法单独登录时。管理它们可能真的很麻烦。尝试谷歌搜索“免费作业调度程序 Linux”或查看http://juiceboxjobs.com我在家里的 3D 渲染农场使用它(运行 Ubuntu 12.04)。

相关内容