Я запускаю игровой сервер и хочу запускать его на экране при запуске системы, но экран зависит от пользователя, поэтому я должен запустить команду как «пользователь». Итак, я написал этот короткий служебный сценарий, который запускается как «пользователь»:
#!/bin/sh
#/etc/init.d/gameserver
case "$1" in
-user)
sleep 1
case "$2" in
start)
echo "Starting server..."
screen -dmS scr1 /home/user/game/run.sh
echo "Server started"
;;
stop) #definitely unfinished
echo "Stopping Server..."
#screen -S scr1 say Server is going down for a halt now!
#sleep 1
#screen -S scr1 stop
echo "Server stopped"
;;
*)
echo "Usage: /etc/init.d/gameserver {start|stop}"
exit 1
;;
esac
;;
*)
su - user -c "bash -c '/etc/init.d/gameserver -user $1'"
;;
esac
exit 0
и после sudo update-rc.d gameserver defaults
команда sudo service gameserver start
работает нормально, но, к сожалению, сервер не запускается при запуске системы. Я использую Ubuntu 12.04 x64
изменить: я попытался заменить su -c
с участием setuid
но все равно без изменений.
Вам нужно включить его, чтобы он запускался во время загрузки
update-rc.d gameserver включить
или если вы делаете это вручную; вам, скорее всего, понадобится символическая ссылка (/etc/rc2.d
) к /etc/init.d/gameserver
ln -s /etc/init.d/gameserver /etc/rc2.d/S99gameserver
и остановить его при выключении и перезагрузить эти два
ln -s /etc/init.d/gameserver /etc/rc0.d/K99gameserver
ln -s /etc/init.d/gameserver /etc/rc6.d/K99gameserver
редактировать
явно установите PATH в вашем сценарии инициализации; скорее всего, он не работает, потому что не может найти где »screen
''bash
' и 'su
'вы пытаетесь бежать там
установить путь делать;
экспорт ПУТЬ = / sbin: / bin: / usr / sbin: / usr / bin: / usr / local / bin: / usr / local / sbin
установите это сразу после #!/bin/bash
в вашем сценарии