我正在尝试为 teamspeak 服务器制作一个简单的 upstart 脚本,但无法使其工作。
当我说初始化启动它只是执行,但永远不会完成,甚至不会发出任何消息。同样的事情也发生在停止。
为了确保我没有做错任何事,我复制了 cron 脚本并尝试运行它,但结果还是一样。
我在这里做错了什么?
更新:
这是我的 TS3 脚本:
# myservice - myservice job file
description "my service description"
author "Me <[email protected]>"
# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process if crashed
respawn
# Essentially lets upstart know the process will detach itself to the background
expect fork
# Start the process
script
emit going into TS3 dir
chdir /home/danizmax/teamspeak3-server_linux-x86/
emit starting TS3
exec su -c "/home/danizmax/teamspeak3-server_linux-x86/ts3server_startscript.sh start" danizmax &
emit done
end script
我甚至尝试使用最简单的脚本,但还是不起作用:
description "regular background program processing daemon"
start on runlevel [2345]
stop on runlevel [!2345]
expect fork
respawn
exec echo example
console output
感谢您的帮助。
答案1
你这份新工作中有许多奇怪的事情让我困惑不已。
1) 据我所知,emit 不是一个程序,因此除非您已将其添加到系统路径,否则可能会导致错误。您的意思是“echo”吗?这可能也没什么用,因为它会转到可能不可见的系统控制台。
2)假设“emit”节有效,你说“expect fork”,但实际上 fork两次。一次用于“脚本”,然后当 teamspeak 脚本分叉到后台时再次进行。
3)您“su”来运行脚本,但在大多数情况下,start-stop-daemon 实际上更简单:
使用 11.10,您不需要执行chdir
in 脚本,不确定是否在您拥有的 upstart 版本之后添加了该脚本。检查man 5 init
单词chdir
start on runlevel [2345]
stop on runlevel [^2345]
respawn
chdir /home/danizmax/teamspeak-server
expect fork
exec start-stop-daemon --start --user danizmax --group danizmax --exec /home/danizmax/teamspeak3-server_linux-x86/ts3server_startscript.sh -- start
此外,错误可能会报告在 /var/log/syslog 中。您可以通过运行以下命令来增加错误级别:
initctl log-priority info
man initctl
了解更多日志级别。