是否有可能让cron从shell脚本的输出接收它的指令,而不是读取静态文件?
我试图在一堆机器上pipe理crontabs,并且为每台机器维护单独的crontab文件是一件苦差事。 我希望cron能够运行一个shell脚本,根据给定的机器是否分配给该作业,为每个作业打印出crontab行。 我可以这样做吗?
PS-我见过一些build议木偶/厨师等。 为此目的,但我认为这只是处理这个问题的矫枉过正。
我认为在大多数发行版上执行此操作最简单的方法是使用自动部署工具,如Puppet / Chef以及/etc/cron.d目录。 您可以将crontabs放在该目录中,除了使用下面的格式而不是典型的格式:
* * * * * <user> <command>
用户将在哪里运行cron。
你似乎认为Puppet是矫枉过正的(不是),但是目录部分也适用于任何其他解决scheme。
是的,你当然可以做到这一点。 只要设置你需要产生crontab输出的脚本,并将其scp到目标服务器。
在那里,一个静态的cron作业可以特别地读取那些crontabs来执行,从任何方便的位置。
这正是傀儡和朋友的预期用途。
如果你不喜欢你的发行版的包pipe理设置,那么你在crontab中的唯一条目就是运行puppet代理。
外部剧本将在傀儡大师身上。 在一个地方。 对于所有机器。
如果足够的问题考虑使用外部脚本,我build议傀儡。 厨师当然可以做类似的事情。
我开始使用木偶来pipe理多台机器上的~/.ssh/authorized_keys ,这是一个类似的“小”问题。
一个stream行的技巧是做一个更新整个crontab的crontab项。 只要您的shell脚本不会将错误的数据提供给crontab这将会正常工作。
但是,我提出了一个更容易pipe理的不同方法:有一个经常运行脚本的静态crontab项。 让脚本尽可能地花时间去运行一些东西。 这样,您仍然可以使用crontab作为常规的crontab,而不必让脚本知道每台机器上可以运行的所有东西。