Como passar argumentos de linha de comando para o script atd init no Ubuntu 16.04

Como passar argumentos de linha de comando para o script atd init no Ubuntu 16.04

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.5ao 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 grepproduz 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 systemdforneç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 atdserviç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 editpara 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.

informação relacionada