新兴服务从来不会完全启动或停止

我正在尝试为Teamspeak服务器制作一个简单的upstart脚本,但无法使其工作。 当我输入"initctl start"时,它只是执行,但从不完成或发出任何消息。停止也是同样的情况。 为了确保我没有做错任何事情,我复制了cron脚本并尝试运行它,但结果也是一样的。 我在这里做错了什么? 更新: 这是我的TS3脚本:
# myservice - myservice job file
description "my service description"
author "Me <myself@i.com>"

# 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
谢谢你的帮助。

你可能想展示一下你尝试运行的新任务,这样我们才能调试它。如果没有看到它,很难知道为什么会卡住。 - slangasek
我复制了cron脚本并尝试运行它,结果是一样的,只是停在那里,从来没有返回到shell界面。 - danizmax
我们还需要看到你的新人剧本。没有它,我们无法做任何事情。请将其张贴或提供链接给我们。 - hggdh
没有看到脚本,我只能猜测:你的脚本是否在upstart下以root身份运行?Root的路径是不同的。如果你的脚本想要使用一个不在root路径下的应用程序,你必须指定完整的路径。你的脚本中是否有一个不返回的程序? - waltinator
请参阅http://askubuntu.com/questions/14810/from-init-d-to-upstart-is-there-a-bridge - waltinator
我使用我的脚本更新了我的帖子。 - danizmax
我们可能还需要ts3server_startscript。 - CameronNemo
1个回答

你这个新手工作中有一些奇怪的地方让我感到困惑。

1)emit不是我知道的程序,所以除非你将其添加到系统路径中,否则可能会导致错误。你是不是想说'echo'?但这也可能没有帮助,因为它会输出到系统控制台,可能看不见。

2)假设'emit'部分正常工作,你说'expect fork',但实际上却fork了两次。一次是为了'script',然后当teamspeak脚本自己分叉到后台时再fork一次。

3)你使用"su"来运行脚本,但对于大多数情况来说,start-stop-daemon更简单:

在11.10版本中,你不需要在脚本中执行chdir,不确定这是在你所使用的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 以获取更多日志级别。

不是楼主,但他正在使用(danimaz)su来以自己的用户身份执行服务器,而不是成为root。 - Javier Rivera
哈哈,底部的滚动条被完美地对齐以隐藏用户名。:-P - SpamapS