在我们的环境中,我们有两个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作业仅在该帐户下运行。
这是一个最佳实践,除了解决您的问题之外还提供了许多好处:
在我以前的公司,我禁用所有真正的用户帐户的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是正确的; 他们可能会在另一个分配不同。