すでにこれについて多くの質問がありますが、過去に使用した方法に問題がありました。以前のバージョンのUbuntuでは、以下を使用しました。このチュートリアル。
ファイルを作成しました。
/etc/init.d/myservice.sh
ファイルには次の内容が含まれています。
#!/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
ファイルに正しい権限/所有者があることを確認しました。
実行
sudo service myservice start
し、次のエラーが発生します。myservice.service を起動できません。ユニット myservice.service が見つかりません。
検索してみると相反する情報がたくさんありました。もうこの方法が利用できないというstackoverflowの回答を見つけましたが、他の人はこの方法がまだサポートされていると言いました。 Ubuntu 16.04を使用していると仮定すると(チュートリアルを教えてもらえますか?)、正しい方法は何ですか?これがまだうまくいけば、誰かが今うまくいかない理由を教えてもらえますか?
答え1
私が一つ見つけた興味深い記事initを交換する必要がある理由と、何と交換する必要があるのかを説明します。 initプロセスは順番に開始されます。つまり、最後のジョブが正常に開始され、メモリにロードされた後にのみジョブが開始されます。ではありません。」
~/.config/autostart
したがって、私の質問に答えるためにいくつかの有効な理由でinit.dをsystemdに置き換えたように見えますが、GypsyCosmonautのコメントで述べたような他のアプローチは、使用している場合は便利なランチャーアプリケーションに付属の起動スクリプトを持っていますです。デスクトップツール。
init.dの例
私が最初に試したことを実際に実行したい人がいる場合に備えて、/etc/init.dディレクトリへのリンクだけが必要です。
/etc/init.d/yourProgram start
たとえば、または同じコマンドを使用して実行する必要がある.jarファイルがある場合は、/etc/init.d/yourProgram stop
次のようにします。
sudo ln -s /path/to/yourProgram.jar /etc/init.d/yourProgram
上記の方法は、.jarの代わりにプログラムを起動するスクリプトを指している場合でも機能します。
init.dは起動時に開始されます。
起動時にサービスを開始するには、次を使用します。
sudo service yourProgram defaults
その後、自動的に/etc/init.d/を探し、実際のスクリプトへのリンクを見つけます。