起動時にTomcatを管理者権限で起動します


23

システムにログインする前に、1つのプロセスを実行する必要があります。サービスのように実行する方法は?Linuxでサービスを作成するにはどうすればよいですか?

UbuntuとFedoraで?サービスはカスタマイズされたTomcat


6
Linuxディストリビューションでは、サービスの起動方法は非常に条件付きです。あなたが今何を達成しようとしているのか(そして、どのディストリビューションと多分デスクトップ環境)について教えてください。
xenoterracide

回答:


23

システムログインせずに、またはシステムログインする前に(つまり「起動時」に)サービスを実行するには、起動スクリプトを作成し、起動シーケンスに追加する必要があります。
サービススクリプトには、開始、停止、再起動の3つの部分があります。
サービススクリプトの基本構造は次のとおりです。

#!/bin/bash
#
RETVAL=0;

start() {
echo “Starting <Service>”
}

stop() {
echo “Stopping <Service>”
}

restart() {
stop
start
}

case “$1″ in
start)
  start
;;
stop)
  stop
;;
restart)
  restart
;;
*)

echo $”Usage: $0 {start|stop|restart}”
exit 1
esac

exit $RETVAL  

スクリプトを好みに合わせて調整したら、/ etc / init.d /に配置
し、システムサービスのスタートアッププロセスに追加します(Fedoraでは、Ubuntuユーザーではありません> D):

chkconfig -add <ServiceName>  

サービスはシステムの起動プロセスに追加され、手動で再起動する必要はありません。

乾杯!


2
通常、単純なinitスクリプトでは、開始、停止、および再起動で十分です。また、 'status'アクションを含めることをお勧めします。これは、Debianおよびinit-functionsパッケージにstatus_of_proc()を含む他のディストリビューションでは簡単です。適切に管理されたパッケージには、LSBが必要とするすべての機能が含まれます(refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/…)。Ubuntuのtomcatで配布されているinitスクリプトには、これらのアクションがすべて含まれています。おそらく、それを使用するだけです。
スティーブンD

19

initシステムに応じて、initスクリプトを別々に作成します。Fedoraは、upstartとsystemdから選択することができ、もちろんSysV互換性もあります。

新興企業

  • サービス定義ファイルを作成します /etc/init/custom-tomcat.conf
  • 入れる:

    start on stopped rc RUNLEVEL=3
    respawn
    exec /path/to/your/tomcat --and --parameters
    

そして、Tomcatはシステムの起動時に起動するはずです。

システム化

  • でサービス定義を作成する /etc/systemd/system/custom-tomcat.service
  • 入れる:

    [Service]
    ExecStart=/path/to/your/tomcat --and --parameters
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

を使用してサービスを有効にしますsystemctl enable custom-tomcat.service。通常のブートごとに開始されます。

もちろん、両方のinitシステム用の設定オプションはほとんどありません。それらのドキュメントでそれらを確認できます。


7

Tomcatはかなり一般的なサービスです。すでにディストリビューションが提供しているinitスクリプトを確認することをお勧めします。カスタマイズされたバイナリで動作する可能性があり、ほとんど調整する必要はありません。


6

cronデーモンがある場合、定義済みのcronタイムフックの1つは@reboot、システムの起動時に自然に実行されます。実行crontab -eしてcrontabファイルを編集し、行を追加します。

@reboot /your/command/here

これはすべてのスタートアップに適用されますか、それとも再起動のみですか?
-WhyNotHugo

これはfcronにのみ適用されます-vixie-cronやその他のcronには適用されません。
マチェイピエチョトカ

@Maciejこれは間違いなくvixie-cronで機能します。それが私が使っているものです
マイケル・ムロゼク

@Hugoすべてのスタートアップ
Michael Mrozek

6

コンピューターの起動後、ユーザーがログインする前に単純にスクリプトを実行するには、スクリプト/etc/rc.localを編集するだけで、このタスクを正確に解決できます。


3

次のように、特定のユーザーの権限で実行できる、より洗練されたスクリプトを作成できます。

#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"

#Helper functions
start() {
        start-stop-daemon --start --quiet --background --make-pidfile \
                --pidfile /var/run/$NAME.pid --chuid $USERGROUP \
                --exec /usr/local/bin/myservice
}

stop() {
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec myservice --retry 30
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        stop
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        #set +e
        stop
        #set -e
        #sleep 1
        start

        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

スクリプトは/etc/init.d/myserviceにあり、次を実行してサービスを開始します。

/etc/init.d/myservice start

start-stop-daemonのmanページを読んで、その仕組みを理解してください。


1

UbuntuまたはDebianで使用できるように、追加する

update-rc.d your_service defaults

削除する

update-rc.d -f your_service remove

さようなら!\ o

関数statusとforce-reloadをLSBにコンパイルするように実装すると便利です


デーモンをservice --status-allリストに表示する方法は?
ネックウィ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.