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

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

(На аналогичный вопрос здесь уже дан ответ, но этот ответ недопустим для Ubuntu 16.04, поскольку файл /etc/init.d/atd.conf не существует, и в моем / etc / init нет строки "exec atd"). файл.d / 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 в начале), но это не имело никакого значения (у меня все еще есть работа в моей очереди, хотя мой уровень загрузки ниже 7,5; и ps -ef | grep atd | grep -v grep доходность daemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f)

1 ответ

Решение

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

Вместо этого atd служба запускается напрямую systemd, используя файл модуля /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.
Другие вопросы по тегам