Ubuntu 16.04에서 atd init 스크립트에 명령줄 인수를 전달하는 방법

Ubuntu 16.04에서 atd init 스크립트에 명령줄 인수를 전달하는 방법

재부팅 및 패키지 업그레이드 후에도 지속되는 명령줄 인수를 atd 데몬에 어떻게 전달할 수 있습니까? -l 7.58-CPU 서버가 있고 일괄 작업을 실행하기 전에 로드 수준이 컴파일된 값인 1.5 아래로 떨어질 때까지 기다리고 싶지 않기 때문에 atd에 명령줄 플래그를 추가하고 싶습니다 .

(비슷한 질문에 답변되었습니다.여기, 그러나 /etc/init.d/atd.conf 파일이 존재하지 않고 /etc/init.d/atd 파일에 "exec atd" 줄이 없기 때문에 해당 답변은 Ubuntu 16.04에 유효하지 않습니다.)

/etc/init.d/에 있는 대부분의 스크립트와 달리 /etc/defaults/에는 해당 atd 파일이 없으므로 해당 파일을 편집할 수 없습니다.

다음은 /etc/init.d/atd 스크립트입니다:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          atd
# Required-Start:    $syslog $time $remote_fs
# Required-Stop:     $syslog $time $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Deferred execution scheduler
# Description:       Debian init script for the atd deferred executions
#                    scheduler
### END INIT INFO
#
# Author:       Ryan Murray <[email protected]>
#

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/atd
PIDFILE=/var/run/atd.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

case "$1" in
  start)
        log_daemon_msg "Starting deferred execution scheduler" "atd"
        start_daemon -p $PIDFILE $DAEMON
        log_end_msg $?
    ;;
  stop)
        log_daemon_msg "Stopping deferred execution scheduler" "atd"
        killproc -p $PIDFILE $DAEMON
        log_end_msg $?
    ;;
  force-reload|restart)
    $0 stop
    $0 start
    ;;
  status)
    status_of_proc -p $PIDFILE $DAEMON atd && exit 0 || exit $?
    ;;
  *)
    echo "Usage: /etc/init.d/atd {start|stop|restart|force-reload|status}"
    exit 1
    ;;
esac

exit 0

시작 섹션의 start_daemon 줄 끝에 -l 7.5를 추가하려고 시도했지만 아무런 차이가 없었습니다. (내 로드 수준이 7.5 미만이지만 여전히 대기열에 작업이 있고 ps -ef | grep atd | grep -v grep결과가 나옵니다 daemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f.)

답변1

지금 보고 있는 것은 이전 스타일의 SysV 초기화 파일입니다. systemd이러한 파일을 통해 서비스를 시작하는 메커니즘(이전 버전과의 호환성을 위해)을 제공 하지만sysv init 호환 모드, Ubuntu 16.04는 이 경우 그렇게 하지 않는 것으로 보이므로 init 파일에 대한 변경 사항은 단순히 무시됩니다. 파일이 여전히 존재하는 이유가 확실하지 않습니다.

대신, 유닛 파일을 사용하여 atd에 의해 직접 서비스가 시작됩니다 . 그러나 해당 파일을 직접 편집하는 대신 @muru의 훌륭한 답변에 설명된 대로 사용자 정의 구성을 생성하는 데 사용해야 합니다.systemd/lib/systemd/system/atd.servicesystemctl editsystemd 서비스를 어떻게 재정의하거나 구성합니까?

구체적으로,

sudo systemctl edit atd

그런 다음 예를 들어 추가하십시오.

[Service]
ExecStart=
ExecStart=/usr/sbin/atd -l 7.5 -f

저장하고 종료한 후 서비스 장치를 다시 시작하세요.

sudo systemctl restart atd.service

그런 다음 다음을 사용하여 변경 사항이 적용되었는지 확인할 수 있습니다.

systemctl status atd.service

당신은 다음과 같은 것을보아야합니다

● atd.service - Deferred execution scheduler
   Loaded: loaded (/lib/systemd/system/atd.service; enabled; vendor preset: enab
  Drop-In: /etc/systemd/system/atd.service.d
           └─override.conf
   Active: active (running) since Sat 2017-06-10 09:38:30 EDT; 8min ago
     Docs: man:atd(8)
 Main PID: 17247 (atd)
   CGroup: /system.slice/atd.service
           └─17247 /usr/sbin/atd -l 7.5 -f

Jun 10 09:38:30 xenial-vm systemd[1]: Started Deferred execution scheduler.

관련 정보