2014-06-12 52 views
0

我有一个小bash脚本来备份一些MySQL数据库。该脚本使用mysqldump从MySQL中删除数据库,并将压缩转储压缩到LAN上的另一台服务器。脚本似乎需要更多时间作为cronjob运行

当我直接从命令行运行脚本,执行时间是大约2-3分钟。

我添加了相同bash脚本给用户根的crontab中。这个cronjob每天执行三次。我有一个印象,那就是脚本的执行时间要长得多(我猜可能长达一个小时)。

有什么办法,我可以调试这是怎么回事幕后?我想知道为什么执行需要更多时间。

在crontab条目看起来如下:

* 0,8,16 * * * /opt/maintenance/backup-databases.sh 

回答

3

如果上面给出的crontab的语法是你真正使用的人,你的cronjob不执行,一天三次,而中午12点和早上8点到下午4点,每天的每一分钟。在给定时间内执行60次执行。因此,根据脚本,它可能会运行一个小时。

如果脚本运行2-3分钟,你应该看到在并行2-3的任务,如果你在这段时间使用ps命令。您可能还想调查系统日志。应该为每个命令crond每分钟开始一个日志条目。

添加小时的分钟时,您的cronjob应该开始解决这个问题(例如,12,如果你想每天凌晨12点上和上午8点到下午4点的12分钟你的cronjob运行):

12 0,8,16 * * * /opt/maintenance/backup-databases.sh 
+0

我同意ASC ..没有注意到。 –

3

创建一个包装脚本调用wrap.sh和里面那个把下面的线和在crontab中调用wrap.sh。如果您将STDOUT/STDERR引用到文件以查找任何输出/错误,它不会受到伤害。 您可以使用时间戳记作为日志文件名称。另外,在你的主备份脚本.sh中,你可以提供一些echo语句来查看发生了什么,例如当你打开日志文件时,它会显示你的回显消息,这些消息会显示过时的备份操作和时间命令输出结束向您显示完成整个wrap.sh脚本(它调用备份脚本..)需要多少时间。

#!/bin/bash 
DATE="$(date +"%m%d%Y%H%M%S")"; 
time /opt/maintenance/backup-databases.sh > /some/directory/${DATE}.wrap.log 2>&1 

,如果你的备份脚本是像(注意,这里我们使用的实际日期命令,而不是日期变量)。

a 
# then do someone like 
echo $(date +"%m%d%Y%H%M%S") -- step A: completed. 
b 
echo $(date +"%m%d%Y%H%M%S") -- step B: completed. 
c 
echo $(date +"%m%d%Y%H%M%S") -- step C: completed. 
d 

如果你只是为了调试寻找:然后执行以下(bash的-x或sh -x或ksh -x等,如下图所示):

#!/bin/bash 
DATE="$(date +"%m%d%Y%H%M%S")"; 
time bash -x /opt/maintenance/backup-databases.sh > /some/directory/${DATE}.wrap.log 2>&1 
1

您可以随时计时您的脚本

time /opt/maintenance/backup-databases.sh 2>&1 | egrep real 

或者在shell脚本中输入一些带有一些信息的日志文件。

+0

想知道..输出将去..如果这是在crontab中的位置?因为你正在将STDOUT(1)和STDERR(2)转到&1(1的地址,也就是STDOUT所在的地方,这是监视器/屏幕),对吗? –

相关问题