web-dev-qa-db-fra.com

Comment passer des arguments de ligne de commande au script d'initialisation atd dans Ubuntu 16.04

Comment puis-je passer un argument de ligne de commande au démon atd qui persistera lors des redémarrages et des mises à niveau des packages? Je souhaite ajouter l'indicateur de ligne de commande -l 7.5 à atd parce que je dispose d'un serveur à 8 processeurs et que je ne veux pas attendre que le niveau de charge descende sous la valeur compilée de 1,5 avant d'exécuter des travaux par lots.

(Une question similaire a été répondue ici , mais cette réponse n'est pas valide pour Ubuntu 16.04 car le fichier /etc/init.d/atd.conf n'existe pas et il n'y a pas de ligne "exec atd "dans mon fichier /etc/init.d/atd.)

Contrairement à la plupart des scripts de /etc/init.d/, il n'y a pas de fichier atd correspondant dans/etc/defaults /, je ne peux donc rien y modifier.

Voici le 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

J'ai essayé d'ajouter -l 7.5 à la fin de la ligne start_daemon au début), mais cela ne faisait aucune différence (j'ai toujours un travail dans ma file d'attente bien que mon niveau de charge soit inférieur à 7.5; et ps -ef | grep atd | grep -v grep renvoie daemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f).

3
nickcrabtree

Qu'est-ce que vous regardez il y a un ancien fichier SysV init. Bien que systemd fournisse un mécanisme (de compatibilité ascendante) pour démarrer des services via de tels fichiers via un mode de compatibilité de sysv init , Ubuntu 16.04 ne semble pas le faire dans ce cas, de sorte que vos modifications apportées au fichier init sont: simplement ignoré - je ne suis pas sûr de savoir pourquoi le fichier est toujours présent.

Au lieu de cela, le service atd est lancé directement par systemd, à l'aide du fichier d'unité /lib/systemd/system/atd.service. Cependant, plutôt que de modifier ce fichier directement, vous devez utiliser systemctl edit pour créer une configuration personnalisée, comme décrit dans l'excellente réponse de @ muru Comment puis-je remplacer ou configurer les services systemd?

Plus précisément,

Sudo systemctl edit atd

puis ajoutez par exemple

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

Sauvegarder et quitter, puis redémarrer l'unité de service

Sudo systemctl restart atd.service

Après cela, vous pouvez confirmer que votre modification a pris effet à l'aide de

systemctl status atd.service

Vous devriez voir quelque chose comme

● 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.
4
steeldriver