web-dev-qa-db-ja.com

起動時に開始するサービスを作成するにはどうすればよいですか?

これについてはすでにいくつかの質問がありますが、私は過去に使用した方法で問題にぶつかりました。古いバージョンのUbuntuでは、 このチュートリアル を使用しました。

  1. ファイルを作成しました_/etc/init.d/myservice.sh_

  2. このファイルには次のものが含まれています。

#!/bin/bash SERVICE_NAME=myservice PATH_TO_JAR=/usr/local/MyProject/MyProject.jar PID_PATH_NAME=/var/run/$SERVICE_NAME.pid case $1 in start) echo "Starting $SERVICE_NAME ..." if [ ! -f $PID_PATH_NAME ]; then Nohup Java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is already running ..." fi ;; stop) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stoping ..." kill $PID; echo "$SERVICE_NAME stopped ..." rm $PID_PATH_NAME else echo "$SERVICE_NAME is not running ..." fi ;; restart) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stopping ..."; kill $PID; echo "$SERVICE_NAME stopped ..."; rm $PID_PATH_NAME echo "$SERVICE_NAME starting ..." Nohup Java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is not running ..." fi ;; esac

  1. ファイルに正しい権限/所有者があることを確認しました

  2. _Sudo service myservice start_を実行すると、次のエラーが発生します。

    Myservice.serviceの開始に失敗しました:ユニットmyservice.serviceが見つかりません。

これを調べてみると、矛盾する情報がたくさん見つかりました。私はあなたがもうこの方法を使うことができないと言っているstackoverflowの答えを見つけました、そして他の人はこの方法がまだサポートされていると言っています。私がUbuntu16.04を使用していると仮定すると(そしておそらくチュートリアルを教えてくれますか?)、正しい方法は何ですか?この方法がまだ有効である場合、誰かが私にそれが今機能しない理由の方向を示すことができますか?

2
trueCamelType

興味深い記事 initを置き換える必要がある理由と、それを何に置き換える必要があるのか​​を見つけることができました。引用すると、「initプロセスは連続して開始されます。つまり、1つのタスクは、最後のタスクの起動が成功し、メモリにロードされた後にのみ開始されます。これにより、起動時間が遅くなり、長くなることがよくあります。物事をきちんと行うことで、国連が必要とするすべての遅延を回避できます。」

したがって、私自身の質問に答えるには、いくつかの正当な理由でsystemdがinit.dに置き換わったように見えます。また、GypsyCosmonautのコメントに記載されているような他の方法では、~/.config/autostartに起動スクリプトを配置するだけです。デスクトップを使用している場合は、便利なスタートアップアプリケーションツールを使用します。

init.dの例


誰かが私が最初に試みていたことを本当にやりたいと思っている場合に備えて、/ etc /init.dディレクトリへのリンクが必要です。

たとえば、/etc/init.d/yourProgram startまたは/etc/init.d/yourProgram stopのようなコマンドを使用して実行する必要がある.jarファイルがある場合は、次のようなことを行うだけです。

Sudo ln -s /path/to/yourProgram.jar /etc/init.d/yourProgram

上記の方法は、.jarの代わりにプログラムを開始するスクリプトを指す場合にも機能します

init.d start on boot


そのサービスを起動時に開始する場合は、次を使用します。

Sudo service yourProgram defaults

これにより、/ etc/init.d /が自動的に検索され、実際のスクリプトへのリンクが見つかります。

0
trueCamelType