我正在运行一个游戏服务器,并希望在系统启动时在屏幕上启动它,但屏幕是特定于用户的,所以我必须以“用户”的身份运行命令。所以我写了这个简短的服务脚本,它以“用户”的身份启动:
#!/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
仍然没有变化。
答案1
您需要启用它以在启动时启动
update-rc.d 游戏服务器启用
或者如果你手动执行;你很可能需要符号链接(/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
设置路径做;
导出 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
#!/bin/bash
在脚本中立即设置此项