两个用户如何设置相同的cron文件来运行?

在我们的环境中,我们有两个DBA来运行一些在cron_jobs.txt文件中定义的cron作业。 我们经常需要在cron_jobs.txt文件中查询时间和命令并重新加载。

问题是,如果DBA_1编辑并重新加载该文件($ crontab cron_jobs.txt),则会在其使用帐户下加载该文件。 现在,DBA_2编辑相同的cron_jobs.txt文件并重新加载。 新的作业集将在DBA_2 useraccounts下运行。 所以,基本上相同的工作是两次。

例如,一个作业设置为每天由DBA_1在3PM运行。 几天之后,DBA_2将其更改为2PM并重新加载。 现在我们在2PM和3PM都有相同的工作。

有什么办法可以合并这些工作吗? 不pipe是谁加载cron_job.txt文件,只有一组作业应该运行? 顺便说一句(DBA_1pipe理员访问UNIX,DBA_2不)。 我们正在使用Sun OS 5.10。 一个解决scheme将不胜感激。

谢谢。

DBA_2

为此设置一个单独的帐户,并让cron作业仅在该帐户下运行。

这是一个最佳实践,除了解决您的问题之外还提供了许多好处:

  • 没有必要担心DBA是否被巴士撞上,或者其他
  • 真正的用户帐户环境不会影响您的生产cron作业
  • 加上sudo,它提供了良好的日志logging/问责制

在我以前的公司,我禁用所有真正的用户帐户的cron&at。

使用angular色帐户而不是将事情绑定到常规用户帐户。 然后让两个用户都可以运行这个命令。

sudo crontab -u dba_cron_user -e

一种方法是使用两个用户都可以写入的信号量文件。 让cron作业检查这个文件的存在和文件的date – 如果它的当前date比作业已经运行 – 所以不需要运行 – 第二次运行文件的尝试将会退出。 这种方法的问题是,早期的运行总是会赢的。

通常说,

crontab -e 

并编辑文件。 在这种情况下,以前的编辑是在进行更改时出现的。 这保持(一个用户login的)crontab一致。


另一种方法是获取当前文件,追加并加载它。

 crontab -l > buffer.txt cat new_command.txt >> buffer.txt crontab buffer.txt 

在这里,所需的技巧是将new_command.txt合并到buffer.txt中,以便消除复制。 当使用crontab -e时,用户通常会正确地做到这一点。

您可以创build从第一个用户的crontab文件(/ var / spool / cron / DBA_1)到第二个用户的crontab文件(/ var / spool / cron / DBA_2)的硬链接或软链接。 这种方法的缺点是两个用户共享相同的crontab,并且都不能获取单个文件。

上述位置对于RHEL / CentOS是正确的; 他们可能会在另一个分配不同。