我有一个在屏幕会话中运行的 shell 脚本,该脚本每 10 分钟连续循环一次(永不结束)。我想知道如何启动屏幕会话,运行 shell 脚本,然后在启动时断开与它的连接。
现在我运行这个:
screen
sh /var/www/scripts/screen.sh
ctrl+ad (to detach)
答案1
我目前使用 minecraft 的屏幕脚本。
这是我的方法:screen -dmS
。
脚本中的确切行:
as_user "cd $MCPATH && screen -dmS $SCREEN $INVOCATION"
as_user "screen -list | grep '\.$SCREEN' | cut -f1 -d'.' | tr -d -c 0-9 > $pidfile"
您也许可以使用screen -dm
它,它可能非常适合您。
至于“在启动时运行”,您可以制作一个 init.d 脚本。
sudo vi /etc/init.d/screensh
:
#!/bin/bash
# /etc/init.d/screensh
### BEGIN INIT INFO
# Provides: screen.sh
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Screen.sh
# Description: This runs a script continuously in screen.
### END INIT INFO
case "$1" in
start)
echo "Starting screen.sh"
screen -dm sh /var/www/scripts/screen.sh
;;
stop)
echo "Stopping screen.sh"
PID=`ps -ef | grep screen.sh | grep -v grep | awk '{print $2}'`
kill -9 $PID
;;
restart|force-reload)
echo "Restarting $screen"
PID=`ps -ef | grep screen.sh | grep -v grep | awk '{print $2}'`
kill -9 $PID
sleep 15
screen -dm sh /var/www/scripts/screen.sh
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
然后运行sudo update-rc.d screensh defaults
。
尝试一下,如果不行的话就尝试一下,但是应该...目前还没有一个可以尝试的测试系统。