So übergeben Sie Befehlszeilenargumente an das ADT-Init-Skript in Ubuntu 16.04

So übergeben Sie Befehlszeilenargumente an das ADT-Init-Skript in Ubuntu 16.04

Wie kann ich dem atd-Daemon ein Befehlszeilenargument übergeben, das auch nach Neustarts und Paketaktualisierungen bestehen bleibt? Ich möchte das Befehlszeilenargument -l 7.5zu atd hinzufügen, da ich einen 8-CPU-Server habe und nicht warten möchte, bis die Auslastung unter den kompilierten Wert von 1,5 fällt, bevor ich Batch-Jobs ausführe.

(Eine ähnliche Frage wurde beantwortetHier, aber diese Antwort ist für Ubuntu 16.04 nicht gültig, da die Datei /etc/init.d/atd.conf nicht existiert und in meiner Datei /etc/init.d/atd keine Zeile „exec atd“ vorhanden ist.)

Anders als bei den meisten Skripten in /etc/init.d/ gibt es in /etc/defaults/ keine entsprechende atd-Datei, daher kann ich dort keine Änderungen vornehmen.

Hier ist das Skript /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

Ich habe versucht, -l 7.5 an das Ende der Zeile start_daemon im Abschnitt „Start“ anzufügen, aber das hat keinen Unterschied gemacht (ich habe immer noch einen Job in meiner Warteschlange, obwohl mein Lastlevel unter 7,5 liegt; und ps -ef | grep atd | grep -v grepergibt daemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f)

Antwort1

Was Sie dort sehen, ist eine SysV-Init-Datei im alten Stil. Obwohl systemdes einen Mechanismus (aus Gründen der Abwärtskompatibilität) gibt, um Dienste über solche Dateien über eineSysv-Init-Kompatibilitätsmodus, Ubuntu 16.04 scheint dies in diesem Fall nicht zu tun, daher werden Ihre Änderungen an der Init-Datei einfach ignoriert – ich bin nicht sicher, warum die Datei noch vorhanden ist.

Stattdessen wird der atdDienst direkt über gestartet systemd, wobei die Unit-Datei verwendet wird /lib/systemd/system/atd.service. Anstatt diese Datei jedoch direkt zu bearbeiten, sollten Sie systemctl editeine benutzerdefinierte Konfiguration erstellen, wie in der hervorragenden Antwort von @muru beschrieben.Wie überschreibe oder konfiguriere ich systemd-Dienste?

Speziell,

sudo systemctl edit atd

dann füge zum Beispiel hinzu

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

Speichern und beenden, dann die Service-Unit neu starten

sudo systemctl restart atd.service

Anschließend können Sie die Wirksamkeit Ihrer Änderung bestätigen, indem Sie

systemctl status atd.service

Sie sollten etwa Folgendes sehen:

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

verwandte Informationen