init.d ネットワークが完全に機能しているときに init.d でサービスを開始するにはどうすればよいでしょうか?

init.d ネットワークが完全に機能しているときに init.d でサービスを開始するにはどうすればよいでしょうか?

RESTful サービス (Flask フレームワークを使用) を公開する Python スクリプトがあります。このサービスで実行したいのは、最新バージョンの Python スクリプトを複製し、main.py を起動することです。

明らかにinitレベル3で起動される可能性がありますが、init情報をどのように構成する必要があるかはわかりません。また、crontabを次のように更新しても問題ないかどうかもわかりません。

sudo update-rc.d myservice enable 3

myservice スクリプトの内容は次のようになります。

#!/bin/sh
rm -fR /home/pi/myservicedir
git clone https://repo/code.git /home/pi/myservicedir
cd /home/pi/myservicedir
python main.py

答え1

スクリプトが適切なinit.dスクリプトではありません。 に、起動スクリプトの作成に使用できるテンプレート ファイルがある可能性があります/etc/init.d。 それ以外の場合は、 の他のスクリプトを調べて、/etc/init.dディストリビューションで使用されているパターンを見つけてください。

あるいは、rc.localは通常、ブート サイクルの非常に遅い段階で実行されます。 これは、スタートアップ コードを配置するのに適した場所です。コードを実行する前に$1の値を確認してください。start

サーバーは にリストされている順序で起動されます/etc/rc3.d。 開始する kill スクリプトがK最初に字句順に実行され、次に 開始する start スクリプトがS字句順に実行されます。 すべてが確実に実行されるようにするには、 の開始順序を使用します99

ディストリビューションには、ディレクトリ内のリンクをインストールおよび削除する方法があるはずですrc#.d。あなたの場合、それは のようですupdate-rc.d。これは通常、スクリプトの先頭のコメント行によって制御されますinit.d

man必要なプログラムとファイルについて説明しているページがあるはずです。man update-rc.dおよびを実行してみてくださいman -k init

答え2

次のように $network を指定します。

#!/bin/bash                                                          
### BEGIN INIT INFO                                                  
# Provides: mountftp                                                 
# Required-Start: $remote_fs $syslog $network                        
# Required-Stop: $remote_fs $syslog $network                         
# Default-Start: 2 3 4 5                                             
# Default-Stop: 0 1 6                                                
# Short-Description: Mount disk2                                     
# Description: Mount disk2                                           
### END INIT INFO

関連情報