このinit.dスクリプトは、ubuntuで起動しようとしていますが、起動時に実行されません。ただし、「Sudo /etc/init.d/couchpotato start」と入力すると動作します。起動時に開始する方法についてのアイデアはありますか?
#! /bin/sh
### BEGIN INIT INFO
# Provides: CouchPotato application instance
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts instance of CouchPotato
# Description: starts instance of CouchPotato using start-stop-daemon
### END INIT INFO
############### EDIT ME ##################
# path to app
APP_PATH=/usr/local/sbin/couchpotato
# path to python bin
DAEMON=/usr/bin/python
# startup args
DAEMON_OPTS=" CouchPotato.py -q"
# script name
NAME=couchpotato
# app name
DESC=CouchPotato
# user
RUN_AS=root
PID_FILE=/var/run/couchpotato.pid
############### END EDIT ME ##################
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo "Starting $DESC"
start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
;;
stop)
echo "Stopping $DESC"
start-stop-daemon --stop --pidfile $PID_FILE
;;
restart|force-reload)
echo "Restarting $DESC"
start-stop-daemon --stop --pidfile $PID_FILE
sleep 15
start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
Insservコマンドを使用しようとする場合があります。 10.10インストールの「man insserv」コマンドから、次のように読むことができます。
insserv - Enable an installed system init script.
これをターミナルで実行してみてください:
Sudo chmod 755 /etc/init.d/couchpotato
Sudo update-rc.d couchpotatoのデフォルト
================================
そして、起動時に実行を無効にする場合:
Sudo update-rc.d -f couchpotato remove
詳細を確認するには、次を実行します。
man update-rc.d
提供されたinit.dスクリプトを機能させることはできませんでした。うまく実行できましたが、init.dはcouchpotatoを起動しましたが、接続できませんでした。私は先に進み、それのために独自の汚いスクリプトを作成しました。これは、installdirにパス〜/ .couchpotatoを使用している場合に機能します。
### BEGIN INIT INFO
# Provides: CouchPotato application instance
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Should-Start: $NetworkManager
# Should-Stop: $NetworkManager
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts instance of CouchPotato
# Description: starts instance of CouchPotato using start-stop-daemon
### END INIT INFO
USER="youruser"
case "$1" in
start)
echo "Starting $DESC"
/home/micdawg/.couchpotato/CouchPotato.py &
;;
stop)
echo "Stopping $DESC"
PID=`ps -ef | grep CouchPotato.py | grep -v grep | awk '{print $2}'`
kill -9 $PID
;;
restart|force-reload)
echo "Restarting $DESC"
PID=`ps -ef | grep CouchPotato.py | grep -v grep | awk '{print $2}'`
kill -9 $PID
sleep 15
/home/micdawg/.couchpotato/CouchPotato.py &
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
受け入れられる答えは、システムの起動時にプロセスを開始するために「upstart」が使用されていることを前提としています。これは常にそうではありません。仮想プライベートサーバーで実行しているUbuntu 9.04 Minimalを使用していますが、これはupstartを使用しません。
この場合、システムが/etc/init.dのスクリプトを認識して実行するには、システムが指示を探す場所でinet.dスクリプトへのシンボリックリンクを作成したupdate-rc.dを実行する必要があります。起動するとき。
このようなもの:
update-rc.d couchpotato defaults 92
92は優先度の実用的な値であり、他の重要なものが実行されるまでスクリプトの起動を遅らせます。
詳細 update-rc.dの実行について
from:init.dスクリプトのランレベル情報LSBコメントヘッダーが使用されます(..)このようなヘッダーは、init.dスクリプトに存在する必要があります。 LSBヘッダー形式の詳細については、insserv(マニュアルページを参照してください。
例:
### BEGIN INIT INFO
# Provides: Apache2
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start/stop Apache2 web server
### END INIT INFO
ブート時にサービスが開始されない理由がわからない場合。ただし、コマンドservice <your service> start
を使用して手動で開始しようとすると、完全に正常に開始されます。次に、標準出力とエラー出力を何らかのファイルにリダイレクトしてみてください。それはあなたにそれが始まっていない理由のいくつかの手がかりを与えるかもしれません
例えばあなたのスクリプトの中
case "$1" in
start)
echo "Starting Service "
<your command to start the service > /tmp/bootservice.log 2>&1
;;
stop)
echo "Stopping Service "
<your command to start the service > /tmp/bootservice.log 2>&1
;;
*)
echo "Usage: /etc/init.d/test {start|stop}"
exit 1
;;
esac
exit 0