我写了这个简单的启动脚本:
SESSION_NAME="session1"
COMMAND="python /opt/aaa/manage.py runserver 192.168.1.1:4300"
case "$1" in
start)
screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"
echo "session1 started"
;;
stop)
echo "Stopping session1"
screen -S session1 -X quit
echo "."
echo "session1 stopped"
;;
restart)
echo "Restarting session1"
screen -S session1 -X quit
echo "."
screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"
echo "session1 has restarted"
;;
*)
echo "Usage: /etc/init.d/session1 {start|stop|restart}"
exit 1
;;
esac
exit 0
但是如果我运行 /etc/init.d/startscript.sh start,它不起作用。屏幕会话不运行。你能帮助我吗?谢谢你的回复。
答案1
服务的问题在于用户和tty。
让屏幕在启动时运行的另一种方法是让用户自动登录,然后使用“~/.screenrc”中预配置的一组窗口和命令启动屏幕
登录时重新连接到该屏幕。
答案2
我看到您的屏幕无法启动的唯一原因是 python 命令中存在错误。要识别问题,脚本命令可能会对您有所帮助。它会将输出写入您可以读取的日志文件。
这是该脚本的改进版本,其中包含我通常在脚本中添加的信息:
#!/bin/sh
NAME=session1
SCRIPTNAME=/etc/init.d/$NAME
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SESSION_NAME="session1"
COMMAND="python /opt/aaa/manage.py runserver 192.168.1.1:4300"
LOGPATH="/var/tmp/session1.log"
case "$1" in
start)
screen -dmS "$SESSION_NAME" script -a --flush -c "$COMMAND" $LOGPATH
echo "session1 started"
;;
stop)
echo "Stopping session1"
screen -S session1 -X quit
echo "."
echo "session1 stopped"
;;
restart)
echo "Restarting session1"
screen -S session1 -X quit
echo "."
screen -dmS "$SESSION_NAME" script -a --flush -c "$COMMAND" $LOGPATH
echo "session1 has restarted"
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 2
;;
esac
exit 0
答案3
我认为问题出在你的$COMMAND
变量上。命令名称应该是python
可执行文件,其余的是参数。但是,如果你把它放在引号中,screen
它会认为命令的名称是整个字符串并寻找具有该名称的可执行文件。
尝试这个:
COMMAND="/usr/bin/python /opt/aaa/manage.py runserver 192.168.1.1:4300"
case "$1" in
start)
screen -dmS "$SESSION_NAME" $COMMAND
echo "$SESSION_NAME started"
;;
...
即,没有引号$COMMAND
,也没有(不必要的)$ARGUMENTS
变量。这应该可以工作。
答案4
最后我使用了这个脚本,但我删除了新窗口的命令 -如何在同一屏幕会话中自动启动新窗口?