부팅 시 시작되는 서비스를 만드는 방법은 무엇입니까?

부팅 시 시작되는 서비스를 만드는 방법은 무엇입니까?

이미 이것에 대해 많은 질문이 있지만 과거에 사용했던 방법에 문제가 있었습니다. 이전 버전의 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 답변을 찾았지만 다른 사람들은 이 방법이 여전히 지원된다고 말했습니다. Ubuntu 16.04를 사용한다고 가정하면(튜토리얼을 알려 주실 수 있나요?) 올바른 방법은 무엇입니까? 이것이 여전히 작동한다면 누군가 지금 작동하지 않는 이유를 말해 줄 수 있습니까?

답변1

내가 하나 찾았어흥미로운 기사init를 교체해야 하는 이유와 무엇으로 교체해야 하는지 설명합니다. "init 프로세스는 순차적으로 시작됩니다. 즉, 마지막 작업이 성공적으로 시작되어 메모리에 로드된 후에만 작업이 시작됩니다. 이로 인해 시작이 지연되고 시작 시간이 길어지는 경우가 많습니다. 그러나 systemd는 속도를 위한 것이 아닙니다."

~/.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/를 찾고 실제 스크립트에 대한 링크를 찾습니다.

관련 정보