Upstart脚本不知道mysql服务

时间:2014-05-28 11:26:45

标签: ubuntu init mariadb upstart

我会创建upstart脚本,它会在关闭之前从DB刷新脏页。我使用Ubuntu 14.04和MariaDB。我用这个开始启动脚本:

start on stopping mysql

script
    [something]
end script

但脚本返回:

start: Unknown job: on
Script started, file is typescript

但是剧本什么也没做......我哪里错了?请问有人帮帮我吗?是的;)

1 个答案:

答案 0 :(得分:0)

脚本:

#
# mysql-shutdown - This script clean innodb dirty pages
# from: http://www.mysqlperformanceblog.com/2009/04/15/how-to-decrease-innodb-shutdown-times/
#

start on stopping mysql
console output

script
    echo "Mysql-shutdown script start:"
    pct=0

    # Call the given function, require that it complete successfully, and then
    # return the status.
    rcall() {
        echo -n '+'
        echo -n $@
        $@
        status=$?

        if [ $status != 0 ]; then
            echo " FAILED"
            exit $status
        fi

        echo
        return $status
    }

    if [ "$1" = "--allow_dirty_buffers" ]; then
        pct=90
    fi

    innodb_status=$(echo "SHOW ENGINES;" | rcall mysql --user=root | grep InnoDB | cut -f2)
    if [ "$innodb_status" = "DISABLED" ]; then
        echo "The Innodb storage engine is disabled"
        exit 0
    fi

    # tell mysql that we need to shutdown so start flushing dirty pages to disk.
    # Normally InnoDB does this by itself but only when port 3306 is closed which
    # prevents us from monitoring the box.
    rcall mysql --user=root << EOF
    SLAVE STOP;
    SET GLOBAL innodb_max_dirty_pages_pct=$pct;
    EOF

    # ..... how wait until the dirty buffer size goes down to zero.
    IFS=
    if [ "$1" = "--progress" ]; then
        echo "Innodb dirty pages:"
        while [ true ]; do
            status=$(echo 'SHOW INNODB STATUS\G' | rcall mysql --user=root)
            modified_db_pages=$(echo $status | grep -E '^Modified db pages' | grep -Eo '[0-9]+$')

            if [ "$modified_db_pages" = "0" ]; then
                echo
                break
            fi

            echo -ne "$modified_db_pages\r";
            sleep 1
        done
    fi
end script