【问题标题】:Script seems to take more time when run as cronjob作为 cronjob 运行时,脚本似乎需要更多时间
【发布时间】:2014-08-03 03:17:36
【问题描述】:

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

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

我在 root 用户的 crontab 中添加了相同的 bash 脚本。这个 cronjob 每天执行 3 次。我的印象是,脚本的执行时间要长得多(我猜最多一个小时)。

有什么方法可以调试幕后发生的事情吗?我想知道为什么执行需要这么多时间。

crontab 条目如下所示:

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

【问题讨论】:

    标签: mysql linux bash cron backup


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我同意 ASC.. 没注意到。
    【解决方案2】:

    您可以随时为您的脚本计时

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

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

    【讨论】:

    • 想知道.. 输出将去哪里.. 如果这是放在 crontab 中?当您将 STDOUT (1) 和 STDERR(2) 都放到 &1 时(地址 1 也就是 STDOUT 所在的位置,即监视器/屏幕),对吧?
    【解决方案3】:

    创建一个名为 wrap.sh 的包装脚本,并在其中放入以下行并在 crontab 中调用 wrap.sh。如果您将 STDOUT/STDERR 扔到文件中以查找任何输出/错误,这不会有任何伤害。 您可以使用时间戳作为日志文件名。此外,在您的主备份脚本 .sh 中,您可以提供一些 echo 语句来查看发生了什么,即当您打开日志文件时,它会显示您的 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
    

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-19
      • 2017-09-08
      • 2018-07-13
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多