¿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.5
a 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 grep
produce 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 systemd
proporciona 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 atd
servicio 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 edit
para 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.