标签: cron

如何在特定最长时间后停止脚本?

我正在对 S3 进行每日备份。我只想在晚上 8 点到早上 8 点之间消耗上传带宽。任何个人运行都可能需要超过 12 小时,因为我们的上传很糟糕。我不担心随意杀死 s3cmd 因为它会在下次运行时正确恢复。

我的 crontab 看起来像这样:

# 0 20 * * * s3cmd sync FOO s3://MyBucket
Run Code Online (Sandbox Code Playgroud)

如果是上午 8 点,我如何测试并使其停止。理想情况下,我希望我可以做这样的事情:

# 0 20 * * * time --limit 12H "s3cmd sync FOO s3://MyBucket"
Run Code Online (Sandbox Code Playgroud)

我正在使用 Ubuntu 服务器。

谢谢!

编辑:

基于量子的回答。对于多个上传命令,我认为我应该怎么做?

# 0 20 * * * s3cmd sync FOO s3://MyBucket; s3cmd sync BAR s3://MyBucket; s3cmd sync FOOBAR s3://MyBucket;
# 0 8 * * * pkill s3cmd; sleep 1; pkill s3cmd; sleep 1; pkill s3cmd; …
Run Code Online (Sandbox Code Playgroud)

linux bash cron

2
推荐指数
1
解决办法
2653
查看次数

在 python cronjobs 中捕获错误

我有一个 python 脚本作为一个像这样调用的 cron 作业

/path/to/python /path/to/myscript myparam
Run Code Online (Sandbox Code Playgroud)

当脚本中出现错误时,cronjob 会默默地失败。当我从命令行运行相同的命令时,我会得到一个堆栈跟踪。作为 cron 作业运行时,如何使我的脚本输出堆栈跟踪(或将其写入文件)?我已经设置了MAILTO变量。我也试过把

/path/to/python /path/to/myscript myparam 2>&1 >> /path/to/logfile
Run Code Online (Sandbox Code Playgroud)

在 crontab 中,但日志文件仍为空。

更新:没有输出重定向的调用现在可以工作了。这不是 python 脚本的问题,而是 MAILTO crontab 设置中的错误分隔符。记住:使用逗号,不要在逗号后面加空格!

python cron

2
推荐指数
1
解决办法
7205
查看次数

Cron 作业无法备份 Postgres 数据库

我不确定这里发生了什么:

我有一个在 root 下运行良好的备份脚本。它会在正确的目录中生成一个 >300kb 的数据库转储。

但是,当使用完全相同的命令将其作为 cron 作业运行时,会出现一个空的 gzip 文件,其中没有任何内容。

cron 日志显示没有错误,只是命令已运行。

这是脚本:

#! /bin/bash

DIR="/opt/backup"
YMD=$(date "+%Y-%m-%d")
su -c "pg_dump -U postgres mydatabasename | gzip -6 > "$DIR/database_backup.$YMD.gz" " postgres

# delete backup files older than 60 days
OLD=$(find $DIR -type d -mtime +60)
if [ -n "$OLD" ] ; then
    echo deleting old backup files: $OLD
    echo $OLD | xargs rm -rfv
fi
Run Code Online (Sandbox Code Playgroud)

当改为:

 pg_dump -U postgres mydatabasename | gzip -6 > "$DIR/database_backup.$YMD.gz"
Run Code Online (Sandbox Code Playgroud)

同样的事情发生。

和 cron 工作: …

postgresql backup cron

2
推荐指数
1
解决办法
3606
查看次数

crontab 计划和 cron 作业

我在/etc/cron.d/目录中放置了两个文件:

第一个每天中午 12:00 发一个新帖子:

0 0 * * * php /var/www/site1/helper post:make
Run Code Online (Sandbox Code Playgroud)

第二个每10分钟更新一次最新的帖子

10 * * * * php /var/www/site1/helper post:update
Run Code Online (Sandbox Code Playgroud)

我是否必须根据时间(例如每 10 分钟)为这项工作执行其他操作,还是必须执行crontab job1crontab job2

编辑:我还安装了cronie。

linux centos scheduled-task cron

2
推荐指数
2
解决办法
375
查看次数

使用 cron 和脚本,我如何才能在每个月的最后一个星期二前 11 天的上午 10 点触发某些内容?

我想安排一个任务在特定月份的一周中的指定日期之前运行几秒、几分钟、几小时、几天或几周。例如:

  • 每月最后一个星期二前 7 天的早上 8 点
  • 每月第二个星期六前 11 天的上午 10 点
  • 每月最后一个星期五前 3 天下午 6 点

我很乐意设置 cron/at 在指定的日期运行作业,并意识到如果我想按这些类型的时间表运行,我可能不得不与 cron 一起运行脚本。

有没有人有我如何去做的例子?

linux bash scheduled-task cron

2
推荐指数
1
解决办法
385
查看次数

Cron 作业没有将 Redis 置于从属模式

我的组织在主/从配置中运行 Redis,使用 Keepalived 在两者之间切换。发现当Slave实例因为某种原因死亡时,Keepalived不会重启它。我开始编写一个 cron 作业来检查并查看 redis 是否正在运行,如果从站死机,则重新启动它。

#!/bin/bash
#redis_cron_restart.sh
######variables########
REDIS_IP="10.19.105.229"
REDIS_CONF="/var/lib/redis/redis.conf"
#Check to see if Redis is running
killall -0 redis-server
if [ $? -eq 1 ]
        then
                date >> /var/lib/redis/log.txt
                echo redis-server not running. Checking redis master >> /var/lib/redis/log.txt
                redis-cli -h ${REDIS_IP} PING
                if [ $? -eq 1 ]
                        then
                                echo redis master not running. Doing nothing. >> /var/lib/redis/log.txt
                        else
                                echo redis master is running. I must be the slave. Restarting keepalived >> /var/lib/redis/log.txt
                                redis-server ${REDIS_CONF}
                                sleep …
Run Code Online (Sandbox Code Playgroud)

cron redis ubuntu-12.04

2
推荐指数
1
解决办法
258
查看次数

命令不会在 crontab 中执行,而命令本身工作正常

我在 Github 上有来自 Colin Johnson 的这个脚本 - https://github.com/colinbjohnson/aws-missing-tools/tree/master/ec2-automate-backup

看起来很棒。我已将其修改为在每次创建或删除 EBS 快照时向自己发送电子邮件。以下工作就像一个魅力

ec2-automate-backup.sh -v "vol-myvolumeid" -k 3

但是,它根本不作为我的 crontab 的一部分执行(我没有收到任何电子邮件)

#一些被注释掉的命令

*/5 * * * * ec2-automate-backup.sh -v "vol-fb2fbcdf" -k 3;

* * * * * 日期>> /root/logs/crontab.log;

*/5 * * * * 日期 >> /root/logs/crontab2.log

请注意,第二个和第三个执行得很好,因为我可以在日志文件中看到日期和时间。

我在这里错过了什么?

完整的 ec2-automate-backup.sh 如下:

#!/bin/bash -
# Author: Colin Johnson / colin@cloudavail.com
# Date: 2012-09-24
# Version 0.1
# License Type: GNU GENERAL PUBLIC LICENSE, Version 3
#
#confirms that executables required for succesful …
Run Code Online (Sandbox Code Playgroud)

bash cron amazon-ec2 amazon-ebs shell-scripting

2
推荐指数
1
解决办法
1万
查看次数

将 Cron 作业添加到多个服务器

将新的 cron 作业同时添加到多台服务器或在多台服务器上自动创建 cron 作业的最佳方法是什么。

我计划使用 rysnc 将 bash 脚本推送到多个服务器,但我需要添加一个将运行此脚本的 cron 作业。

linux cron

2
推荐指数
2
解决办法
3245
查看次数

如何将 cronjobs 添加到 /etc/cron.daily/

  • 我们必须使用crontab -e将 cronjob 添加到 crontab。
  • crontab -r删除 cronjobs。
  • 在这里,不允许复制和粘贴

我需要在cron.daily 中添加一个脚本,如何添加?

cron cron.daily

2
推荐指数
1
解决办法
1万
查看次数

服务器之间 crontab 条目的随机化分钟

我有一套用于我们的服务器的通用木偶配方。木偶管理的文件之一是/etc/crontab包含原始cron.daily,cron.weeklycron.monthly条目。

/etc/crontab这里的公共文件的问题是所有的 cronjobs 在我们所有的服务器中都在完全相同的时间运行。例如,每日备份消耗了我们所有的备份服务器资源,因为所有服务器都在同时提供它。

在服务器之间随机化每天/每周/每月运行的确切分钟数的首选方法是什么,同时仍然保持所有服务器之间的木偶配方通用?

我一直在考虑几种不同的选择:

  • 运行sleep$RANDOM实际工作之前。这样,crontab每个主机中的时间都会相似,但运行每日/每周作业的确切时间会有所不同。即使在同一服务器内部也会有变化(例如,每天的运行间隔可能在 23-25 小时之间变化)。
  • 从主机名计算一个整数值,并以at+“基于主机名的整数”分钟运行所有作业。有点hacky,但可能会工作......
  • 其他一些方法,但什么?

linux puppet cron

2
推荐指数
1
解决办法
9410
查看次数