如何在mysql启动后才启动systemd服务?

如何在mysql启动后才启动systemd服务?

我正在开发一个单电子邮件服务器项目。我尝试向 systemd 添加一项服务,以便它在启动过程中自动启动,但我遇到了问题。

我已经创建了脚本并添加到/lib/systemd/system/emailserver.service然后运行ln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service

systemd reload-daemon然后我执行了systemctl start emailserver.service,然后当我运行时,ps -ef |grep -i emailserver我可以看到它mono EmailServer.exe正在运行,到目前为止一切看起来都很好。

但是,当我在文件中重新启动服务器时,/var/log/messages它会包含以下错误消息

Jul 16 19:41:02 dev-server systemd[1]: emailserver.service holdoff
time over, scheduling restart. Jul 16 19:41:02 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:03 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:04 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:04 dev-server systemd[1]: emailserver.service start request
repeated too quickly, refusing to start.

在我的 emailserver.service 脚本中,我有以下内容

[Unit]
Description=Boardies Email Server Startup Script

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

我正在使用 OpenSuse 12.1

我做错了什么,感谢您提供的任何帮助。

更新 我已经找到了导致程序在启动时停止工作的原因,但我不确定如何解决这个问题。我的程序依赖于 MySQL 数据库,我认为我的程序在 MySQL 启动之前就启动了,我怎样才能让我的服务在 MySQL 启动之后才加载。

答案1

添加After=mysql.service到您的服务文件(或将其更改为正确的服务名称),例如:

[Unit]
Description=Boardies Email Server Startup Script
After=mysql.service

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

请注意,您不必将服务文件放入 /lib/systemd/system,它是用户提供的文件,您应该只将其复制到 /etc/systemd/system。

要获取可以使用的所有服务文件的列表systemctl list-unit-files,并确定数据库服务的正确名称(可能是 mysql.service 或 mysqld.service)

相关内容