gar*_*les 12 linux svn centos cron
我有一个计划脚本,它每小时对我们的 Subversion 存储库进行 svnsync 备份。我从根 crontab 中的一个条目运行它没有问题,但决定我想从 /etc/cron.hourly 运行它以获得额外的可见性(并且因为我们的一位工程师不小心删除了 crontab,因为他认为“crontab -r" 的意思是"阅读 crontab ;-))
cron.hourly 脚本中的 svnsync 命令全部失败,并显示一条消息,指出需要接受 SVN 存储库的 SSL 证书(这是用户第一次访问 SVN 存储库时以交互方式获得的消息,但是一旦证书我接受消息不会再次出现)。
所以在我看来,从 cron.hourly 运行脚本时,脚本是在不同的用户环境下执行的,而不是通过 root crontab 运行时。谁能解释一下区别?
更新:我应该提到我的发行版,我在 CentOS 5.1 上使用 anacron。
更新 2:感谢到目前为止的建议;我认为这更像是一个 Subversion 问题。我总是尝试将我的环境封装到我的脚本中,但这里的问题是我不确定它在(或缺乏)环境中是什么使 SVN 在我运行我的脚本时要求接受 SSL 证书cron.hourly。我猜这与 run-parts 脚本的执行方式有关。
Zor*_*che 16
在 Debian/Ubuntu 系统上,cron.daily|weekly|montly 从主 crontab 启动。
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
Run Code Online (Sandbox Code Playgroud)
还要记住,您可能可以在 /etc/cron.d/ 中放置一个 crontab 片段
如您所见,此环境没有任何特别之处。至少在 Debian/Ubuntu 上,它都以 root 帐户运行。
当我在脚本的最开始编写 cron 脚本时,我总是设置我的 PATH 和我将使用的其他环境变量,因此我可以确定它可以在任何环境中正常工作。
常规系统范围的 crontab 是特定用户的 crontab,它具有用户名字段,如/etc/crontab
.
在/etc/cron.*
(每小时、每天、每周、每月)中使用脚本是为root
用户配置 crontab 的一种更清晰、更简单的方法(防止常见的语法错误),这是由run-parts
在目录中运行脚本或程序来处理的。默认情况下/etc/crontab
,所有这些规则仍然在系统范围的 crontab 中定义 ( ),所以它是一样的。
当 cron 作业由 处理时run-parts
,更容易调试,因为您可以通过以下方式简单地测试哪些脚本将完全运行(尚未运行它们):
sudo run-parts --report --test /etc/cron.daily
Run Code Online (Sandbox Code Playgroud)