我有一个计划脚本,它每小时对我们的 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 脚本的执行方式有关。
我在执行 cron 进程以检查服务器中当前的 CPU 使用情况时遇到问题。
我的脚本开始于:
top -c -n 1 -u www-data > /tmp/kill-cpu
Run Code Online (Sandbox Code Playgroud)
我可以在控制台中毫无问题地执行,但在 cron 中我得到
顶部:tty 获取失败
如果我使用 -b 选项到顶部
top -b -n 1
Run Code Online (Sandbox Code Playgroud)
我得到
'dumb':未知终端类型。
我使用 xterm 作为 TERM
感谢您的帮助 :)
Lito。
解决方案:我能够通过以下方式解决问题:
ln -s /lib/terminfo/d/dumb /usr/share/terminfo/d/dumb
Run Code Online (Sandbox Code Playgroud) 我想编写一个简单的脚本,在日志更改时提醒我。为此,我使用 grep 来查找我感兴趣的行。现在它是这样工作的:
grep line /var/log/file | mail -s Log email@domain.tld
Run Code Online (Sandbox Code Playgroud)
问题是即使没有找到匹配的行,这也会发送邮件。mailutils 的邮件实用程序似乎没有开关告诉它丢弃正文为空的邮件。
有没有一种快速简便的方法呢?
我需要每 10 分钟运行一次 cron 作业,仅在 4:40 和 0:15 之间。我已经设法将 cron 作业安排在从 4 点到 0 点运行,但无法弄清楚如何进一步安排它。这就是我得出的结论:*/10 4-23,0 * * * script
crontab(5) 定义了以下字段:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
Run Code Online (Sandbox Code Playgroud)
并解释说:
Run Code Online (Sandbox Code Playgroud)Step values can be used in conjunction with ranges. Following a range with ``/<number>'' specifies skips of the number's value through the range. For example, ``0-23/2'' can be used in the hours field to specify command execution every other hour (the alternative in the V7 standard …
我有一个在 0 0 * * 0/2 运行的 cron 作业——即每隔一个星期天。例如,它现在刚刚运行。但是,我希望它在其他星期天运行——下个星期日,而不是这个星期天。另一种说法:我认为它在一年中的偶数星期日运行,但我希望它在奇数星期日运行。
我在“man 5 crontab”中没有看到任何可以帮助我解决这个问题的东西,所以我想我需要回到在 0 0 * * 0 运行 cronjob 然后在我运行的命令中做一些事情来检查它是哪个星期天是。任何人都可以帮我一些合适的命令行技巧吗?
ETA:已经意识到我的 0/2 根本没有按照我最初的想法(每个第二个星期天)做。它每周日运行,只要一周中的那一天可以被 2 整除,当然可以。哦。无论如何,基本要求仍然存在:在奇数星期日运行命令。
我正在尝试调试 cron 没有在我没有配置的 Centos 6 机器上发送邮件的问题。如何确定 cron 使用哪个邮件程序发送邮件?crontab 手册页有这么一段话:
除了 LOGNAME、HOME 和 SHELL,cron(8) 将查看 MAILTO,如果它有任何理由由于在“这个”crontab 中运行命令而发送邮件。如果 MAILTO 已定义(且非空),则邮件将发送给如此命名的用户。如果 MAILTO 已定义但为空 (MAILTO=""),则不会发送邮件。否则邮件将发送给 crontab 的所有者。 如果您在安装 cron 时决定使用 /bin/mail 而不是 /usr/lib/sendmail 作为邮件程序,则此选项很有用 -- /bin/mail 不执行别名,并且 UUCP 通常不读取其邮件。
带星号的部分是让我想知道的部分:“好吧,是 sendmail 还是 mail?”
今天是 2014 年 10 月 3 日星期五凌晨 3:58
我想安排一个像这样的 cronjob 在以下日期运行它:
所以每两周一次,在星期六,在 8 点。
我是一名程序员,对 cron 了解不多,但我想知道这是否可能。
假设我有一个数组[option1, option2, option3]和一个在 NodeJS 中运行的脚本,名为script.js. 我想每天凌晨 1 点运行这个脚本。这个cron命令是:
0 1 * * * node ~/script.js
Run Code Online (Sandbox Code Playgroud)
现在是棘手的部分,我想每天轮换选项,例如,我想在星期一运行node ~/script.js option1,第二天node ~/script.js option2等等。另外,我希望能够在需要时添加/删除选项,但旋转应该保持不变。
这有可能吗?我知道我也可以在节点内执行此操作,但我宁愿从脚本外部执行此操作,并保持脚本原样。
我放入了一个logrotate配置文件,/etc/logrotate.d/并希望日志在一致的时间轮换;但是,它们不会……日志轮换时间似乎是随机的 +/- 一小时。
为什么日志轮换开始时间是随机的,我该如何更改?
/opt/backups/network/*.conf {
copytruncate
rotate 30
daily
create 644 root root
dateext
maxage 30
missingok
notifempty
compress
delaycompress
postrotate
## Create symbolic links in daily/
PATH=`/usr/bin/dirname $1`;
FILE=`/bin/basename $1`;
/bin/ln -s $1 $PATH/daily/$FILE
endscript
}
Run Code Online (Sandbox Code Playgroud)