web-dev-qa-db-ja.com

init.d(または他の方法)を使用して、起動時に画面スクリプトを実行するにはどうすればよいですか?

画面セッション内で実行され、スクリプトを10分ごとに連続的にループする(終了しない)シェルスクリプトがあります。スクリーンセッションを開始し、シェルスクリプトを実行し、ブート時にそれからデタッチする方法を考えていました。

今私はこれを実行します:

screen
sh /var/www/scripts/screen.sh
ctrl+ad (to detach)
3
ATLChris

現在、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を実行します。

それを試してみて、うまくいかない場合は試してみてください。しかし、実際に試してみるためのテストシステムはまだないはずです。

3
Mike