我正在尝试通过 cron 重新启动系统进程,并通过电子邮件发送该进程的启动输出。我认为将 STDOUT 和 SDTERR 重定向到 /dev/null 会“静音”输出,但唉,这不起作用。如何让 cron 以静默方式重新启动此服务?crontab 条目:
0 6 * * * service sympa stop &>/dev/null; service sympa start &> /dev/null
Run Code Online (Sandbox Code Playgroud)
重启电子邮件的示例输出:
Stopping Sympa bounce manager bounced
...done.
* Stopping Sympa task manager task_manager
...done.
* Stopping Sympa mailing list archive manager archived
...done.
* Stopping Sympa mailing list manager sympa
...done.
... waiting Prototype mismatch: sub Lock::LOCK_SH () vs none at /home/sympa/bin/Lock.pm line 38.
Constant subroutine LOCK_SH redefined at /home/sympa/bin/Lock.pm line 38.
Prototype mismatch: …Run Code Online (Sandbox Code Playgroud) 我支持一家拥有远程托管网站的公司。他们使用 PostgreSQL 数据库。
我无法在远程服务器上编写脚本,并且不想在远程服务器上存储任何备份文件,但我可以运行 cron 作业,并且可以访问远程服务器的 SSH 公钥。我设置了本地 Linux 主机来接受远程主机的私钥进行身份验证。
我需要制作一个一行脚本来同步备份、压缩和 scp 备份文件到我的本地 Linux 机器。
如果我的本地 Linux 机器可以通过 SSH 在端口 122 上访问mylinuxbox.foo.com,并且我的数据库名称是mydatabase,那么这个单行 cron 作业命令会是什么样子?
Cron 作业过去已经工作了几个月,但最近我的服务器负载很高,现在 cron 作业没有执行我的 php 文件(与之前工作的相同)。当我检查 cron 日志时,我看到了这一点,我认为这与问题有关:
(CRON) EXEC FAILED (/usr/sbin/sendmail): Resource temporarily unavailable
我需要做什么来解决这个问题?我正在运行 CentOS 7。
编辑:我将此标记为已回答,因为我认为进程挂起导致了此问题。今天,我醒来,同样的问题发生了。我想知道是什么原因造成的。
在 cron 日志中,我看到:
Oct 11 05:01:01 run-parts(/etc/cron.hourly)[25431]: starting 0anacron
Oct 11 05:01:01 run-parts(/etc/cron.hourly)[25444]: finished 0anacron
Oct 11 05:01:01 run-parts(/etc/cron.hourly)[25431]: starting 0yum-hourly.cron
Oct 11 05:01:01 run-parts(/etc/cron.hourly)[25450]: finished 0yum-hourly.cron
Oct 11 05:01:01 CROND[25434]: (CRON) EXEC FAILED (/usr/sbin/sendmail): Resource temporarily unavailable
Oct 11 05:01:01 CROND[25429]: (apache) MAIL (mailed 71 bytes of output but got status 0x0001
Run Code Online (Sandbox Code Playgroud)
更新:
我注意到我的邮件日志中出现了两件事。
Oct 8 14:01:39 postfix/local[12886]: 5180C2D098A5: …Run Code Online (Sandbox Code Playgroud) 当我crontab -e在我的 Debian 服务器上运行并添加这些行时:
# System statistics
*/10 * * * * /usr/lib/sysstat/sa1 1 1 > /dev/null 2>&1
59 23 * * * /usr/lib/sysstat/sa2 -A > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
保存后,crontab 抱怨:
crontab: installing new crontab
"/tmp/crontab.xSbhwZ/crontab":30: bad day-of-week
errors in crontab file, can't install.
Run Code Online (Sandbox Code Playgroud)
这是第30行:*/10 * * * * /usr/lib/sysstat/sa1 1 1 > /dev/null 2>&1。当我评论这一行时,一切都很好。
有什么想法吗?
我正在使用 Let's Encrypt 来保护 Ubuntu 上的 Apache 安装。我最近设置了一个部署挂钩脚本以在续订时运行,我正在certbot renew使用该--deploy-hook选项在 cron 作业中传递给它。
在设置后的第一次更新时,我注意到部署钩子脚本没有运行。深入研究日志,我发现certbot renew实际执行更新的调用并未使用--deploy-hook参数调用。
我还看到它certbot renew每天被调用 3 次,而我的 cron 作业只设置为每天运行一次。这三个调用之一恰好在 cron 作业中指定的时间,并且--deploy-hook提供了参数。另外两个时间是大约 00:30 和大约 12:45,但确切的时间每天都有几分钟的变化。--deploy-hook其他调用不提供该参数。
那么:certbot renew除了我的 cron 工作之外,到底在运行什么?我确认只有root一个crontab, 并且它只包含单个作业定义。
我想每 24 小时运行一次 python 脚本,每 23:59:58 我想终止这项工作。我想立即运行python。因此我在下面使用这个语法
* */24 * * * cd /ftp/ftp1 && timeout -s 9 86398 python2.6 lpr_10.10.252.121.py 10.10.252.121 450 >> res_10.10.252.121.txt
Run Code Online (Sandbox Code Playgroud)
但是在 cron 日志上,他们的脚本没有运行。我试着/etc/rc.d/init.d/crond restart
这是日志cron
May 18 10:13:45 cisco-cumc crontab[31368]: (root) REPLACE (root)
May 18 10:13:45 cisco-cumc crontab[31368]: (root) END EDIT (root)
May 18 10:14:01 cisco-cumc crond[5090]: (root) RELOAD (/var/spool/cron/root)
May 18 10:15:24 cisco-cumc crontab[31449]: (root) BEGIN EDIT (root)
May 18 10:15:42 cisco-cumc crontab[31449]: (root) REPLACE (root)
May 18 10:15:42 cisco-cumc crontab[31449]: (root) END …Run Code Online (Sandbox Code Playgroud) 我有一个简单的 crontab 条目,它应该停止服务,但它不起作用。
* * * * * systemctl stop nginx
Run Code Online (Sandbox Code Playgroud)
我什至试过:
* * * * * /bin/systemctl stop nginx
Run Code Online (Sandbox Code Playgroud)
因为那不是命令显示的 systemctl 的位置。
该行适用于 root 用户,但不适用于 root 的 crontab。
不工作,我的意思是服务没有关闭。我可以确认服务器仍在运行并且 systemctl status nginx 显示它处于活动状态。
我究竟做错了什么?
我需要每 15 分钟运行一次 cron 作业,从 06:05 开始到 22:05 结束。
0 5/15 6-22 * * *
Run Code Online (Sandbox Code Playgroud)
以下语法包括 22:35 和 22:50。
知道如何实现这一目标吗?是否可以用一根线实现这一点,还是需要配置多条线?
我有一个个人Ubuntu主机,连接到公共/共享 Wi-Fi AP(不受我控制)。
有时,会出现网络问题,我很确定,仅重新启动网络服务是行不通的。唯一的办法就是重启它。
我的计划是添加一个 crontab,来测试网络连接。如果失败,请重新启动计算机。
如果我手动运行 auto_reboot.sh,当ping测试失败时,它会重新启动。但是从 crontab 运行,它不起作用:)
这是我的 crontab 条目
crontab -l
* * * * * /root/loadrc/transmissionrc/auto_reboot.sh
Run Code Online (Sandbox Code Playgroud)
#!/bin/zsh
/root/loadrc/networkrc/ping.sh
rc=$?
if [[ $rc -eq 0 ]]
then
echo "say The internet is back up."
else
reboot
fi
Run Code Online (Sandbox Code Playgroud)
#!/bin/zsh
((count = 10)) # Maximum number to try.
while [[ $count -ne 0 ]] ; do
ping -c 1 8.8.8.8 # Try once.
rc=$?
if [[ $rc -eq 0 …Run Code Online (Sandbox Code Playgroud) 我的 Crontab 作业中有以下两个条目,它们设置为在上午 10:00 开始。
0,20 10 * * 1-5 ./run_program_A
0,20 10 * * 1-5 ./run_program_B
在 10:15,我检查了我的日志文件,只有程序 B 运行。程序 A 似乎从未被解雇过。
如果我将程序A的开始时间设置为10:30,它将被解雇。我对 Crontab 不是很熟悉,所以我希望你能对它有所了解。我是否必须确保我所有的工作不是同时设置的?
先感谢您。
cron ×10
linux ×4
debian ×2
backup ×1
centos6 ×1
certbot ×1
lets-encrypt ×1
networking ×1
postgresql ×1
python ×1
ssh ×1
systemd ×1
unix ×1