【问题标题】:mysql connection terminates when i logoff from the remote server当我从远程服务器注销时,mysql 连接终止
【发布时间】:2013-12-02 20:34:05
【问题描述】:

我编写了一个脚本,每 6 秒连接一次本地 mysql 服务器并检查表中是否有任何数据。如果有数据,它会运行一些 php 命令,然后从表中删除该数据。我通过 ssh 登录到我的远程服务器(共享主机),然后复制脚本并使用命令“nohup ./script.sh 0alert.log &”执行它,以便它在后台运行并写入所有输出到 alert.log 文件。我的问题是,当我通过 SSH 登录服务器并执行脚本时,它运行良好,但是当我从服务器注销时,它没有运行。当我在显示错误“无法连接到本地 mysql 服务器”后检查 alert.log 文件时。有什么解决办法吗??

这是代码

while true
      do


    res=($(mysql -u root -p123456 --skip-column-names -Dtest -e "select id from temptab"))

        if [[ "$res" > 0 ]];then
        del=`mysql -u root -p123456  -Dtest -e "delete from temptab;" `

        now="$(date +'%d/%m/%Y:%H.%M.%S')"

        for ((i=0; i < ${#res[@]}; i++))
        do
        php -n /var/lib/mysql/trigger.php ${res[$i]}
        echo "[$now]:Trigger called with videoid ${res[$i]}" 

        done

        fi

    sleep 6
done

这是示例输出 猫 nohup.out X-Powered-By: PHP/5.4.20 内容类型:text/html

{"multicast_id":8864856209398719411,"success":2,"failure":1,"canonical_ids":0,"results":[{"message_id":"0:1385797766832904%4f0c6467f9fd7ecd"},{"error":"InvalidRegistration"},{"message_id":"0:1385797766832901%4f0c6467f9fd7ecd"}]}81Inserted police info
[30/11/2013:00.49.26]:Trigger called with videoid 65
/etc/bashrc: line 14: whoami: command not found
/etc/bashrc: line 20: grep: command not found
/etc/bashrc: line 59: dircolors: command not found
./alert.sh: line 15: php: command not found
[30/11/2013:07.50.27]:Trigger called with videoid 70
./alert.sh: line 15: /ramdisk/php/54/bin/php54: No such file or directory
[30/11/2013:09.09.52]:Trigger called with videoid 71

【问题讨论】:

    标签: mysql bash ssh


    【解决方案1】:

    screen 是您所需要的。 google有很多关于屏幕使用的教程。

    【讨论】:

    • 是的,我也尝试了屏幕.....在我的脚本中我正在执行一个 php 命令....当我通过 ssh 登录到服务器时,php 命令正在执行,但是当我与服务器断开连接时... php 命令根本没有被执行......当我看到 alert.log 文件时,它显示错误为“php:command not found”......我认为我的 shell 正在丢失所有当我断开连接时它的资源
    • SSH 到服务器。开始画面。运行你的 php 代码。分离屏幕。从 ssh 会话注销。屏幕将继续在远程服务器上运行,而远程服务器将运行 php 代码。关于找不到命令,请提供更多信息。
    • 好的,这是我的脚本 --->> while true do res=($(mysql -u root -p123456 --skip-column-names -Dtest -e "select id from temptab") ) if [[ "$res" > 0 ]];then del=mysql -u root -p123456 -Dtest -e "delete from temptab;" now="$(date +'%d/%m/%Y:%H.%M.%S')" for (( i=0; i
    • 这是样本输出 cat nohup.out X-Powered-By: PHP/5.4.20 Content-type: text/html {"multicast_id":8864856209398719411,"success":2," failure":1,"canonical_ids":0,"results":[{"message_id":"0:1385797766832904%4f0c6467f9fd7ecd"},]}81插入的警察信息 [30/11/2013:00.49.26]:触发器调用videoid 65 ./alert.sh:第 15 行:php:找不到命令 [30/11/2013:07.50.27]:使用 videoid 70 调用的触发器 ./alert.sh:第 15 行:/ramdisk/php/54/bin /php54:没有这样的文件或目录 [30/11/2013:09.09.52]:使用 videoid 7 调用的触发器
    • 更新有问题的代码和输出。只是在 cmets 中无法理解。
    【解决方案2】:

    我建议将您的代码移动到一个 crontab 中,即使它每 X 分钟(5 分钟,或您喜欢的任何其他时间)运行一次,而不是让您的用户在实时会话期间运行它。

    只需将 PHP 脚本放在对 cron 的调用中,登录并运行 crontab -e 然后添加:

    */5 * * * * /home/username/phpscript.php
    

    【讨论】:

    • 是的,但可以在 cron 选项卡中设置的最短时间为 1 分钟.....但我希望每 6 秒执行一次脚本以检查数据库中的更新
    • 如果是 perl 我会说“fork”,forking 允许进程与父进程分离运行,我不知道 php 中的等价物
    • 你能建议我如何将命令“nohup ./script.sh 0alert.log &”添加到 cron 作业中
    【解决方案3】:

    您可以尝试像这样运行脚本:

    /path/to/script.sh </dev/null &>/home/yourname/alert.log &
    
    disown
    

    【讨论】:

      【解决方案4】:

      终于我得到了解决方案..我正在使用 /usr/bin/php 来调用我的 php 文件,但是......当我将它编辑到 /usr/bin/php.orig 时它开始工作.. ......... 但是那个 php.orig 是什么...?? @谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        相关资源
        最近更新 更多