如何使用 init.d(或其他方法)在启动时运行屏幕脚本?

如何使用 init.d(或其他方法)在启动时运行屏幕脚本?

我有一个在屏幕会话中运行的 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

尝试一下,如果不行的话就尝试一下,但是应该...目前还没有一个可以尝试的测试系统。

相关内容