我试图让一个Bukkit服务器作为一个服务在屏幕上运行,从一个LSB脚本启动,但我不能让它停止正确。 我基本上希望它做的是重新挂接屏幕并发送一个“停止”命令到服务器控制台,所以它保存了一切,而不是被杀死,但“sudo服务bukkit停止”似乎没有做任何事情与我的脚本。
如果我在terminal重新连接屏幕,并在“Bukkit”控制台上input“stop”,它似乎仍然停止。
任何人都知道问题是什么? 我的init.d脚本如下…
#!/bin/bash ### BEGIN INIT INFO # Provides: scriptname # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO cd /etc/minecraftbukkit case $1 in start) # Checked the PID file exists and check the actual status of process if [ -e $PIDFILE ]; then status_of_proc -p $PIDFILE $DAEMON "$NAME process" && status="0" || status="$?" # If the status is SUCCESS then don't need to start again. if [ $status = "0" ]; then exit # Exit fi fi # Start the daemon. screen -d -A -m -S "Bukkit152" sh ./bukkitrunner.sh ;; stop) # Stop the daemon. screen -d -r "Bukkit152" sleep 2 stop ;; *) esac
pipe理得到它最终与屏幕一起工作。 在“停止”命令后,我忘了发送一个返回carraige,也发现我不得不用“东西”来发送命令屏幕:P
下面是工作代码:
#!/bin/bash ### BEGIN INIT INFO # Provides: scriptname # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO cd /etc/minecraftbukkit case $1 in start) # Checked the PID file exists and check the actual status of process if [ -e $PIDFILE ]; then status_of_proc -p $PIDFILE $DAEMON "$NAME process" && status="0" || status="$?" # If the status is SUCCESS then don't need to start again. if [ $status = "0" ]; then exit # Exit fi fi # Start the daemon. screen -d -A -m -S "Bukkit152" sh ./bukkitrunner.sh ;; stop) # Stop the daemon. screen -S "Bukkit152" -p 0 -X stuff "stop$(printf \\r)" sleep 2 ;; *) esac
感谢@chicks提供关于tmux的提醒,我正在研究它以防万一出现问题…