Как передать аргументы командной строки в скрипт инициализации atd в Ubuntu 16.04

Как передать аргументы командной строки в скрипт инициализации atd в Ubuntu 16.04

Как передать аргумент командной строки в демон atd, который сохранится при перезагрузках и обновлениях пакетов? Я хочу добавить флаг командной строки -l 7.5в atd, поскольку у меня сервер с 8 процессорами, и я не хочу ждать, пока уровень нагрузки опустится ниже скомпилированного значения 1,5, прежде чем запускать пакетные задания.

(На аналогичный вопрос был дан ответздесь, но этот ответ недействителен для Ubuntu 16.04, поскольку файл /etc/init.d/atd.conf не существует, а в моем файле /etc/init.d/atd нет строки "exec atd".)

В отличие от большинства скриптов в /etc/init.d/, в /etc/defaults/ нет соответствующего файла atd, поэтому я не могу вносить там никаких изменений.

Вот скрипт /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

Я пробовал добавлять -l 7.5 в конец строки start_daemon в разделе start), но это ничего не изменило (у меня все еще есть задание в очереди, хотя уровень загрузки ниже 7.5; и ps -ef | grep atd | grep -v grepyields daemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f)

решение1

То, что вы видите, это файл инициализации SysV старого образца. Хотя он systemdпредоставляет механизм (для обратной совместимости) для запуска служб через такие файлы черезрежим совместимости с sysv init, Ubuntu 16.04, по-видимому, в этом случае этого не делает, поэтому ваши изменения в файле init просто игнорируются - я не уверен, почему файл все еще присутствует.

Вместо этого atdслужба запускается напрямую systemdс помощью файла unit /lib/systemd/system/atd.service. Однако вместо того, чтобы редактировать этот файл напрямую, вы должны использовать systemctl editдля создания пользовательской конфигурации, как описано в превосходном ответе @muruКак переопределить или настроить службы systemd?

Конкретно,

sudo systemctl edit atd

затем добавьте, например

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

Сохраните и выйдите, затем перезапустите сервисный модуль.

sudo systemctl restart atd.service

После этого вы можете подтвердить, что ваши изменения вступили в силу, используя

systemctl status atd.service

Вы должны увидеть что-то вроде

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

Связанный контент