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

4

Como posso passar um argumento de linha de comando para o daemon do atd que persistirá durante as reinicializações e upgrades de pacotes? Desejo adicionar a linha de comando sinalizador -l 7.5 a atd porque tenho um servidor de 8 CPUs e não quero esperar que o nível de carga fique abaixo do valor de 1.5 compilado antes de executar tarefas em lote.

(Uma pergunta semelhante foi respondida aqui , 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 consigo 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 a seção -l 7.5 ao final da linha start_daemon no início), mas isso não fez nenhuma diferença (ainda tenho um trabalho na minha fila, embora meu nível de carga seja inferior a 7,5; e ps -ef | grep atd | grep -v grep de rendimento daemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f )

    
por nickcrabtree 10.06.2017 / 09:26

1 resposta

4

O que você está vendo é um arquivo init SysV de estilo antigo. Embora systemd forneça um mecanismo (para compatibilidade com versões anteriores) para iniciar serviços por meio de tais arquivos sysv init modo de compatibilidade , o Ubuntu 16.04 não parece fazê-lo neste caso, portanto, suas alterações no arquivo init são simplesmente ignoradas - não sei por que o arquivo ainda está presente.

Em vez disso, o serviço atd é 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 do @ muru Como faço para substituir ou configurar serviços do systemd?

Especificamente,

sudo systemctl edit atd

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ê deve 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.
    
por steeldriver 10.06.2017 / 15:51

Tags