Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当作为cronjob运行时,脚本似乎需要更多的时间_Mysql_Linux_Bash_Cron_Backup - Fatal编程技术网

Mysql 当作为cronjob运行时,脚本似乎需要更多的时间

Mysql 当作为cronjob运行时,脚本似乎需要更多的时间,mysql,linux,bash,cron,backup,Mysql,Linux,Bash,Cron,Backup,我有一个小bash脚本来备份一些MySQL数据库。该脚本使用mysqldump从MySQL转储数据库,然后rsyncs将压缩转储到局域网上的另一台服务器 当我直接从命令行运行脚本时,执行时间大约为2-3分钟 我将相同的bash脚本添加到用户root的crontab中。这项工作一天执行三次。我的印象是,执行脚本的时间要长得多(我想最多需要一个小时) 我有没有办法调试幕后发生的事情?我想知道为什么处决要花这么多时间 crontab条目如下所示: * 0,8,16 * * * /opt/mainten

我有一个小bash脚本来备份一些MySQL数据库。该脚本使用mysqldump从MySQL转储数据库,然后rsyncs将压缩转储到局域网上的另一台服务器

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

我将相同的bash脚本添加到用户root的crontab中。这项工作一天执行三次。我的印象是,执行脚本的时间要长得多(我想最多需要一个小时)

我有没有办法调试幕后发生的事情?我想知道为什么处决要花这么多时间

crontab条目如下所示:

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

创建一个名为wrap.sh的包装脚本,并在其内部放置以下行,并在crontab中调用wrap.sh。如果您将STDOUT/STDERR抛出到一个文件中以查找任何输出/错误,这不会有什么坏处。 您可以使用时间戳作为日志文件名。此外,在主backup script.sh中,您可以提供一些echo语句来查看发生了什么,例如,当您打开日志文件时,它将显示您的echo消息,其中将显示已过时的备份操作和最后输出的时间命令,显示完成整个wrap.sh脚本(称为backup script..)所需的时间

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

如果您只想调试:那么执行以下操作(bash-x或sh-x或ksh-x等,如下所示):


您可以随时使用

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

或者在shell脚本中输入一个包含一些信息的日志文件。

如果上面给出的crontab语法是您实际使用的语法,那么您的cronjob不会一天执行三次,而是每天上午12点、上午8点和下午4点每分钟执行一次。导致在给定的时间内执行60次死刑。因此,根据脚本的不同,它可能会运行一个小时

如果脚本运行2-3分钟,那么如果在此期间使用ps命令,您应该会看到2-3个并行任务。您可能还想调查系统日志。crond每分钟启动的每个命令都应该有一个日志条目

添加cronjob开始解决此问题的时间分钟数(例如,如果您希望cronjob在每天上午12点、上午8点和下午4点的第12分钟运行,则为12分钟):


疑惑的。。输出将流向何处。。如果这是crontab中的位置?当你把STDOUT(1)和STDERR(2)都放到&1(地址1,也就是STDOUT所在的监视器/屏幕),对吗?我同意ASC。。我没注意到。
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
#!/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
time /opt/maintenance/backup-databases.sh 2>&1 | egrep real
12 0,8,16 * * * /opt/maintenance/backup-databases.sh