Как передать аргументы командной строки в сценарий 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.