Запустить команду на экране, когда начальный скрипт LSB остановлен
Я пытаюсь заставить сервер Bukkit работать внутри экрана в качестве службы, запущенной из сценария LSB, но не могу правильно остановить его. По сути, я хочу, чтобы он снова прикрепил экран и отправил команду "стоп" на консоль сервера, чтобы он сохранил все, а не просто был убит, но "sudo service bukkit stop", похоже, ничего не делает с моим сценарием.
Кажется, он остановится, если я снова подключу экран к терминалу и наберу "стоп" в консоли Bukkit.
Кто-нибудь знает, в чем проблема? Мой скрипт 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
1 ответ
В конце концов удалось заставить его работать с экраном. Я забыл послать возвратный carraige после команды "stop", также узнал, что мне нужно было использовать "stuff" для отправки команд на экран: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, я изучаю его на случай, если возникнут какие-то проблемы...