我正在开发一个单电子邮件服务器项目。我尝试向 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)