web-dev-qa-db-ja.com

起動時にinit.dスクリプトが実行されない

私のスクリプトは、Ubuntuの下のvagrant boxで起動時に実行されていません。

私のスクリプトは次のようになります-

#!/bin/bash
# /etc/init.d/mailcatcher
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
mailcatcher --http-ip 192.168.50.10

ファイルに対する私の権限は次のようになります-

-rwxr-xr-x 1 root root 352 Apr 30 09:59 mailcatcher.sh

私はコマンドを実行します-

Sudo update-rc.d "mailcatcher.sh" defaults

スクリプトを手動で実行すると、スクリプトが機能し、メールキャッチャーが起動します。コンピュータを再起動すると、mailcatcherデーモンが起動しません。何か不足していますか?

4
ILikeTurtles

そして今Ubuntuの答えのために。

これはUbuntu Linuxに関する質問で、バージョン15がリリースされました。 Ubuntuの世界はsystemdになりました。しかし、バージョン15より前でも、Ubuntuの世界には新興企業がありました。 System 5 rcスクリプトを作成する理由は本当にありません。そしてそこからstartingする正当な理由は確かにありません。

Upstartとsystemdの両方がすべての「サービス制御」を行います。あなたがする必要があるのはサービスを説明するだけです。

systemd

/etc/systemd/system/mailcatcher.serviceに配置されるsystemdサービスユニットは、

 [Unit] 
 Description = Ruby MailCatcher 
 Documentation = http://mailcatcher.me/ 
 
 [Service] 
 #Ubuntu/Debian規約:
 EnvironmentFile =-/ etc/default/mailcatcher 
 Type = simple 
 ExecStart =/usr/bin/mailcatcher --foreground --http-ip 192.168 .50.10 
 
 [インストール] 
 WantedBy = multi-user.target 

これにより、次のようなすべてのsystemdコントロールが自動的に取得されます。

  • systemctl enable mailcatcher.serviceは、起動時にサービスが自動的に開始されるように設定します。
  • systemctl preset mailcatcher.serviceは、ローカルポリシーで許可されている場合に、起動時にサービスが自動的に開始されるように設定します。
  • systemctl start mailcatcher.serviceサービスを手動で開始します。
  • systemctl status mailcatcher.serviceサービスのステータスを確認します。

新興

アップスタートも同様であり、Fideloper LLCのアップスタートジョブファイルをこの質問に変更すると、/etc/init/mailcatcher.confでこれが得られます。

説明「Mailcatcher」
 
ランレベル[2345]で開始
ランレベル[!2345]で停止
 
レスポーン
 
 exec/usr/bin/mailcatcher --foreground --http-ip = 192.168.50.10 

これにより、次のようなすべてのアップスタートコントロールが自動的に取得されます。

  • initctl start mailcatcherサービスを手動で開始します。
  • initctl status mailcatcherサービスのステータスを確認します。

ボーナスdaemontoolsセクション

キックについて、WWW検索を介して到達するすべてのdaemontools-family-usingの人々の娯楽のため、およびSystem 5 rcスクリプトで開始しない別の理由を示すために、私はそのsystemdサービスユニットを実行しました- noshツールセットconvert-systemd-unitsコマンドを実行して、次のdaemontools-family実行スクリプトを作成します。

#!/ bin/nosh 
#。/ mailcatcher.service 
#Ruby MailCatcher 
 chdir /
read-confから生成された実行ファイル- -oknofile /etc/default/mailcatcher
/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10 

実際、convert-systemd-unitsコマンドはnoshservice bundleディレクトリ全体を生成します。 nosh /var/sv/mailcatcherを備えたシステムにservice-managerとしてインストールされ、依存関係と順序付け情報を指定するそのディレクトリを使用すると、次のようなnoshコントロールがすべて取得されます。

  • system-control enable mailcatcher.serviceは、起動時にサービスが自動的に開始されるように設定します。
  • system-control start mailcatcher.serviceサービスを手動で開始します。
  • system-control status mailcatcher.serviceサービスのステータスを確認します。
  • system-control preset mailcatcher.serviceは、ローカル構成(systemdスタイルのプリセットまたは/etc/rc.conf{,.local})で許可されている場合に、起動時にサービスが自動的に開始されるように設定します。

System 5のrcファイルをbeginしないでください。

見てください このテンプレート SaltStack for System 5 rcスクリプトによって使用されます。 SaltStackのパラメーター化が排除されたとしても、59行のシェルスクリプトコードであり、その大部分は汎用のボイラープレートであり、再発明し、書き直す必要があります。再び。そしてCeladaはあなたがそれをひどく再発明した場所をすでに指摘しました。

Systemdユニットファイルは11行です。アップスタートジョブファイルは8行です。 nosh runスクリプトは6です。これらのスクリプトは、すべての開始/停止/ステータスメカニズムを実行します。特にUbuntu Linuxでは、System V rcから始めないでください。

参考文献

9
JdeBP

ブート中にコマンドを実行するとき、そのコマンドのenvにアクセスできるとは限りません。そのコマンドには完全修飾名を使用する必要がありました。

起動しない

mailcatcher --http-ip 192.168.50.10

起動時に機能

/usr/bin/mailcatcher --http-ip 192.168.50.10

これでスクリプトは機能しましたが、サービスコントロールを追加して、後で作業を開始および停止できるようにする予定です。

3
ILikeTurtles