쉘 스크립트를 데몬으로 실행하는 시작 스크립트

쉘 스크립트를 데몬으로 실행하는 시작 스크립트

저는 Debian Stretch와 systemd 버전 231-9를 사용하고 있습니다.

로그아웃할 때에도 백그라운드에서 일부 쉘 스크립트와 데몬이 아닌 프로그램을 실행해야 합니다.

나는 LSB 헤더가 있는 간단한 init.d 스크립트를 만든 다음 시작 옵션을 사용하여 단순히 "my_script.sh >> /var/log/my_script.log 2>&1 &"를 수행하여 my_script.sh를 백그라운드에서 실행했지만 이제 Systemd는 일단 터미널을 닫으면 무엇을 시도하든 관계없이 그들을 죽입니다. &, nohup, setid, disown.

스크립트 또는 데몬이 아닌 프로그램을 데몬으로 실행하기 위해 올바른 init.d 스크립트에 대한 레시피를 제공하는 데 도움을 줄 수 있습니까?

감사해요.

답변1

귀하의 물건이 루트 소유인 경우 다음을 수행하십시오 /etc/rc.local.

screen -dmS ThingOne /path/to/thing-one
screen -dmS ThingTwo /path/to/thing-two

또는 모든 사용자(루트 포함)의 경우 cron 테이블에서 다음을 수행합니다.

@reboot screen -dmS ThingOne /path/to/thing-one
# et cetera

답변2

스크립트를 데몬으로 설정하는 방법은 다음과 같습니다.

#! /bin/sh

### BEGIN INIT INFO
# Provides:          foobar
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: foobar
# Description:       more foo for your bars
### END INIT INFO

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting foobar "

    # example 1 - system service
    # /usr/bin/foobar --config /etc/foo.conf start

    # example 2 - run script as user
    # su --login mkaz --command "/home/mkaz/bin/my-script --cmd-args"

    ;;
  stop)
    echo "Stopping foobar"

    # example 1
    # /usr/bin/foobar --config /etc/foo.conf stop

    ;;
  *)
    echo "Usage: /etc/init.d/foobar {start|stop}"
    exit 1
    ;;
esac

exit 0

그런 다음 스크립트를 init.d 폴더로 이동하고 실행 가능하게 만듭니다.

sudo mv foobar /etc/init.d/       # move to init.d
sudo chmod 755 /etc/init.d/foobar # make executable

부팅 시 스크립트를 시작하려면 다음을 수행하세요.

update-rc.d foobar defaults 

시작 시 스크립트를 제거하려면 다음을 수행하십시오.

update-rc.d -f foobar remove

스크립트를 수동으로 시작하려면 다음을 수행하십시오.

service foobar start

원천:https://debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

관련 정보