我正在对 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) 我有一个 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 设置中的错误分隔符。记住:使用逗号,不要在逗号后面加空格!
我不确定这里发生了什么:
我有一个在 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 工作: …
我在/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 job1和crontab job2?
编辑:我还安装了cronie。
我想安排一个任务在特定月份的一周中的指定日期之前运行几秒、几分钟、几小时、几天或几周。例如:
我很乐意设置 cron/at 在指定的日期运行作业,并意识到如果我想按这些类型的时间表运行,我可能不得不与 cron 一起运行脚本。
有没有人有我如何去做的例子?
我的组织在主/从配置中运行 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) 我在 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) 将新的 cron 作业同时添加到多台服务器或在多台服务器上自动创建 cron 作业的最佳方法是什么。
我计划使用 rysnc 将 bash 脚本推送到多个服务器,但我需要添加一个将运行此脚本的 cron 作业。
我需要在cron.daily 中添加一个脚本,如何添加?
我有一套用于我们的服务器的通用木偶配方。木偶管理的文件之一是/etc/crontab包含原始cron.daily,cron.weekly和cron.monthly条目。
/etc/crontab这里的公共文件的问题是所有的 cronjobs 在我们所有的服务器中都在完全相同的时间运行。例如,每日备份消耗了我们所有的备份服务器资源,因为所有服务器都在同时提供它。
在服务器之间随机化每天/每周/每月运行的确切分钟数的首选方法是什么,同时仍然保持所有服务器之间的木偶配方通用?
我一直在考虑几种不同的选择:
sleep与$RANDOM实际工作之前。这样,crontab每个主机中的时间都会相似,但运行每日/每周作业的确切时间会有所不同。即使在同一服务器内部也会有变化(例如,每天的运行间隔可能在 23-25 小时之间变化)。at+“基于主机名的整数”分钟运行所有作业。有点hacky,但可能会工作......cron ×10
linux ×5
bash ×3
amazon-ebs ×1
amazon-ec2 ×1
backup ×1
centos ×1
cron.daily ×1
postgresql ×1
puppet ×1
python ×1
redis ×1
ubuntu-12.04 ×1