재부팅 및 패키지 업그레이드 후에도 지속되는 명령줄 인수를 atd 데몬에 어떻게 전달할 수 있습니까? -l 7.5
8-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.service
systemctl edit
systemd 서비스를 어떻게 재정의하거나 구성합니까?
구체적으로,
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.