mysql的crontab行为差异

时间:2016-03-12 10:13:46

标签: mysql linux macos bash cron

我确实尝试过搜索,但没有任何内容对我有用。 所以我会开始这个帖子,看看是否有人可以提供帮助。我希望这不是一个愚蠢的问题,我忽略了一些简单的事情。

我有一台运行MySQL服务器的mac mini。

有一些日终工作,所以我把它们放入一个脚本,由crontab触发(实际上我也尝试启动,因为这是mac OS X,但行为相同)

crontab看起来像这样

15 00 * * * /Users/fgs/Documents/database/process_db.sh > /Users/fgs/Documents/database/output.txt 2>&1

脚本看起来像这样

#!/bin/bash

#some data patching task before everything start

#This sql takes 3 sec

/usr/local/bin/mysql dbname -u root "-ppassword" < /Users/fgs/Documents/database/loadrawdata.sql 

#This sql takes 90 sec

/usr/local/bin/mysql dbname -u root "-ppassword" < /Users/fgs/Documents/database/LongLongsql.sql

#This sql takes 1 sec

/usr/local/bin/mysql dbname -u root "-ppassword" < /Users/fgs/Documents/database/anothersql.sql 

行为:

一个。当我直接在终端中执行shell脚本时,所有3个sql都可以正常工作

B中。当我使用crontab执行此操作时,90秒的SQL不起作用(它是一个非常大的连接插入,所以没有打印输出,我也试图&gt;输出文件,添加2&gt;&amp; 1 ,也没有输出),但SQL之前和之后的工作正常。

℃。为了模拟crontab行为,我尝试使用

env - /bin/sh

然后手动启动shell脚本。

看起来,90秒longlongsql.sql仅运行5秒,并跳到下一行。没有显示错误消息

我想知道crontab是否有任何超时? (我确实搜索过,但一无所获)

我确实检查过ulimit是无限制的(在"env - /bin/sh"内检查,并且也试图放入脚本中)

我认为它与mysql命令无关,因为它通过运行相同的脚本工作正常(我也搜索了这个主题,并没有什么有趣的)

只是想知道是否有人可以对我有所了解,方向或任何有用的方法。

提前感谢大家。

1 个答案:

答案 0 :(得分:0)

不要忘记cron会启动一个孤立的shell,它可能无法读取文件。 我建议将你的mysql-stuff放在脚本中。如果你能够执行脚本,cron也应该能够这样做。

fse.ensureDir(resourcesOutputDirectory, (error) => {
    if (error) {
        console.err("An error ocurred creating the resources directory " + error.message);
    } else {
        fse.copy(resourcesInputDirectory, resourcesOutputDirectory, "/**/*.mp3", (err) => {
            if (err) {
                console.err("An error ocurred moving resource directory to XML exported directory " + err.message);
            } else {
                console.log("Files has been succesfully copied");
            }
         });
     }
});

或者:

    #!/bin/bash
    /usr/local/bin/mysql dbname -u root "-ppassword" < /Users/fgs/Documents/database/LongLongsql.sq

然后从crontab中调用脚本......