![创建一个 upstart 服务,用于在关机时转储和上传 mysql 数据库](https://linux22.com/image/987277/%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%20upstart%20%E6%9C%8D%E5%8A%A1%EF%BC%8C%E7%94%A8%E4%BA%8E%E5%9C%A8%E5%85%B3%E6%9C%BA%E6%97%B6%E8%BD%AC%E5%82%A8%E5%92%8C%E4%B8%8A%E4%BC%A0%20mysql%20%E6%95%B0%E6%8D%AE%E5%BA%93.png)
我正在运行 Ubuntu Server 14.04 LTS x64。我有两个 KVM 客户机。一个是文件服务器,另一个运行 mysql 服务器。
我有一个在文件服务器上运行的脚本。该脚本通过 ssh 连接到运行 mysql 服务器的客户机,转储 mysql 数据库并将其上传到另一台远程服务器。该脚本按预期工作。现在我想让这个脚本在关机时运行。
我读过关于 upstart 的文章,并尝试创建一个服务来实现这一点。我创建了 init 文件 (/etc/init/dotproject_backup.conf),内容如下:
# dotproject_backup
# This service makes a dump and rsync of a dotproject mysql database prior to shutdown.
description "dotproject backup"
author "Rodrigo Martinho"
start on startup
stop on runlevel [016]
pre-stop script
exec /home/user/script.sh
end script
在此示例中,我还设置了运行级别 6,以便在重启时对其进行测试。在一切正常后,我可能会更改该级别。重启时,系统不会等待脚本运行。事实上,脚本似乎根本没有运行,正如我在日志文件 (/var/log/upstart/dotproject_backup) 中看到的那样。
我尝试了一些其他设置,其中脚本已启动,但在转储上传之前关闭完成:
# dotproject_backup
# This service makes a dump and rsync of a dotproject mysql database prior to shutdown.
description "dotproject backup"
author "Rodrigo Martinho"
start on runlevel [016] or stopping dbus or deconfiguring-networking
script
exec /home/user/script.sh
end script
在此设置中,我可以在日志文件中看到脚本已启动,但在文件上传时被终止。
我在这里的另一篇文章中看到,实现此目的的正确方法是改变启动条件,因此脚本在重启过程开始之前运行:
# dotproject_backup
# This service makes a dump and rsync of a dotproject mysql database prior to shutdown.
description "dotproject backup"
author "Rodrigo Martinho"
start on starting rc RUNLEVEL=[016]
script
exec /home/user/script.sh
end script
但在这个例子中,关机再次在脚本之前完成。
所以,我的问题是:
- 当运行级别因关机或重启而改变时,我应该启动还是停止服务?
- 我应该如何让关机等到脚本完成?
- 将我的脚本作为另一个服务内的预停止来运行是否是一种更好的方法?
在此先感谢您的帮助,
罗德里戈·马丁尼奥。