Como posso passar um argumento de linha de comando para o daemon atd que persistirá durante reinicializações e atualizações de pacotes? Desejo adicionar o sinalizador de linha de comando -l 7.5
ao atd porque tenho um servidor de 8 CPUs e não quero esperar que o nível de carga fique abaixo do valor compilado de 1,5 antes de executar trabalhos em lote.
(Uma pergunta semelhante foi respondidaaqui, mas essa resposta não é válida para o Ubuntu 16.04 porque o arquivo /etc/init.d/atd.conf não existe e não há linha "exec atd" no meu arquivo /etc/init.d/atd.)
Ao contrário da maioria dos scripts em /etc/init.d/, não há arquivo atd correspondente em /etc/defaults/, portanto não posso fazer nenhuma edição nele.
Aqui está o script /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
Eu tentei adicionar -l 7.5 ao final da linha start_daemon na seção start), mas isso não fez nenhuma diferença (ainda tenho um trabalho na minha fila, embora meu nível de carga esteja abaixo de 7,5; e ps -ef | grep atd | grep -v grep
produz daemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f
)
Responder1
O que você está vendo é um arquivo de inicialização SysV antigo. Embora systemd
forneça um mecanismo (para compatibilidade com versões anteriores) para iniciar serviços por meio de tais arquivos por meio de ummodo de compatibilidade de inicialização do sysv, o Ubuntu 16.04 não parece fazer isso neste caso, então suas alterações no arquivo init são simplesmente ignoradas - não sei por que o arquivo ainda está presente.
Em vez disso, o atd
serviço é iniciado diretamente por systemd
, usando o arquivo de unidade /lib/systemd/system/atd.service
. No entanto, em vez de editar esse arquivo diretamente, você deve usar systemctl edit
para criar uma configuração personalizada conforme descrito na excelente resposta de @muruComo substituo ou configuro os serviços do systemd?
Especificamente,
sudo systemctl edit atd
então adicione por exemplo
[Service]
ExecStart=
ExecStart=/usr/sbin/atd -l 7.5 -f
Salve e saia e reinicie a unidade de serviço
sudo systemctl restart atd.service
Depois disso, você pode confirmar que sua alteração entrou em vigor usando
systemctl status atd.service
Você deveria ver algo como
● 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.