systemd를 사용하여 부팅 시 데몬이 시작되도록 설정

systemd를 사용하여 부팅 시 데몬이 시작되도록 설정

헤드리스 장치에서 Java 애플리케이션을 관리하기 위한 데몬을 작성 중입니다.우분투16.04jsvc 상자를 사용하여이 (아마도 사전 시스템화된) 튜토리얼, 계속 실행 중이며 update-rc.d mydaemon enable오류가 발생했습니다.

update-rc.d: error: mydaemon Default-Start contains no runlevels, aborting

구글에서 검색해본 결과, 최근 로의 마이그레이션과 (상당히?) 관련이 있는 것으로 보이며 systemd, 로 실행되고 있는 것을 확인했습니다 pidof systemd.

update-rc.d(더 중요하게는) 동일한 결과를 얻으려면 어떻게 해야 합니까?멈추다/etc/init.d/mydaemon stopJava 애플리케이션을 정리해야 하므로 프로세스를 종료하는 대신 서비스가 통과됩니다 . systemd다른 시스템 인가요 update-rc.d, 아니면 systemd후자가 작동하는 방식이 변경된 것인가요?

답변1

이것을 테스트하거나 많은 세부 정보를 제공할 Ubuntu 16.04는 없지만 systemd에는 이전 /etc/init.d스크립트가 계속 작동할 수 있도록 하는 호환성 기능이 있습니다. 데몬을 활성화하는 대신 update-rc.d동등한 systemd 기본 명령을 사용하십시오.

sudo systemctl enable mydaemon

그래도 동일한 오류가 발생하면 스크립트의 시작 주석 세트에 누락된 줄을 추가하세요.

# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6

### BEGIN INIT INFO및 줄 사이에 ### END INIT INFO다시 시도하십시오. 보다최하위 비트 코어이 줄에 대한 설명입니다. 명시적으로 데몬을 시작할 수도 있습니다.

sudo systemctl start mydaemon

그리고 상태를 물어보세요

sudo systemctl status -l mydaemon

호환성 기능을 참조하세요 man systemd-sysv-generator. 바라보다이 위키System V 또는 귀하와 같은 시작 스크립트를 기본 시스템 단위로 변환하는 데 사용됩니다.

답변2

다음과 같이 /etc/init.d/tightvncserver 스크립트가 있어야 합니다.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          tightvncserver
# Should-Start:      
# Required-Start:    $local_fs $remote_fs x11-common
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: VNC server
# Description:       Debian init script for the VNC Server
### END INIT INFO
# /etc/init.d/tightvncserver

# Set the VNCUSER variable to the name of the user to start tightvncserver under
VNCUSER='pi'
case "$1" in
  start)
    su $VNCUSER -c '/usr/bin/tightvncserver :1 -geometry 1280x800 -depth 16'
    echo "Starting TightVNC server for $VNCUSER"
    ;;
  stop)
    pkill Xtightvnc
    echo "Tightvncserver stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/tightvncserver {start|stop}"
    exit 1
    ;;
esac
exit 0

그런 다음 다음 명령을 실행합니다.

sudo service tightvncserver start

관련 정보