Cómo pasar argumentos de línea de comandos al script de inicio atd en Ubuntu 16.04

Cómo pasar argumentos de línea de comandos al script de inicio atd en Ubuntu 16.04

¿Cómo puedo pasar un argumento de línea de comandos al demonio atd que persistirá durante los reinicios y las actualizaciones de paquetes? Deseo agregar el indicador de línea de comando -l 7.5a atd porque tengo un servidor de 8 CPU y no quiero esperar a que el nivel de carga baje del valor compilado de 1,5 antes de ejecutar trabajos por lotes.

(Se ha respondido una pregunta similaraquí, pero esa respuesta no es válida para Ubuntu 16.04 porque el archivo /etc/init.d/atd.conf no existe y no hay ninguna línea "exec atd" en mi archivo /etc/init.d/atd).

A diferencia de la mayoría de los scripts en /etc/init.d/, no hay un archivo atd correspondiente en /etc/defaults/, por lo que no puedo realizar ninguna edición allí.

Aquí está el 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

Intenté agregar -l 7.5 al final de la línea start_daemon en la sección de inicio, pero eso no hizo ninguna diferencia (todavía tengo un trabajo en mi cola aunque mi nivel de carga está por debajo de 7.5; y ps -ef | grep atd | grep -v grepproduce daemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f)

Respuesta1

Lo que estás viendo es un archivo de inicio SysV de estilo antiguo. Aunque systemdproporciona un mecanismo (para compatibilidad con versiones anteriores) para iniciar servicios a través de dichos archivos a través de unmodo de compatibilidad de inicio de sysv, Ubuntu 16.04 no parece hacerlo en este caso, por lo que sus cambios en el archivo de inicio simplemente se ignoran; no estoy seguro de por qué el archivo todavía está presente.

En cambio, el atdservicio se inicia directamente mediante systemd, utilizando el archivo de unidad /lib/systemd/system/atd.service. Sin embargo, en lugar de editar ese archivo directamente, deberías usarlo systemctl editpara crear una configuración personalizada como se describe en la excelente respuesta de @muru.¿Cómo anulo o configuro los servicios systemd?

Específicamente,

sudo systemctl edit atd

luego agregue por ejemplo

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

Guarde y salga, luego reinicie la unidad de servicio

sudo systemctl restart atd.service

Después de eso, puedes confirmar que el cambio ha tenido efecto usando

systemctl status atd.service

Deberías 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.

información relacionada