再起動やパッケージのアップグレード後も保持されるコマンドライン引数を atd デーモンに渡すにはどうすればよいですか? -l 7.5
8 CPU サーバーを使用しており、バッチ ジョブを実行する前に負荷レベルがコンパイルされた値 1.5 を下回るまで待機したくないため、atd にコマンドライン フラグを追加したいと考えています。
(同様の質問が回答されていますここただし、この回答は 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
start) セクションの start_daemon 行の末尾に -l 7.5 を追加してみましたが、何も変わりませんでした (負荷レベルが 7.5 未満であるにもかかわらず、キューにジョブがまだ残っており、次の結果がps -ef | grep atd | grep -v grep
出ますdaemon 23192 1 0 07:57 ? 00:00:00 /usr/sbin/atd -f
)
答え1
ここで見ているのは、古いスタイルのSysV initファイルです。systemd
後方互換性のために、このようなファイルを介してサービスを開始するためのメカニズムを提供していますが、sysv init 互換モードこの場合、Ubuntu 16.04 ではそのようには行われないようです。そのため、init ファイルへの変更は単に無視されます。ファイルがまだ存在している理由はわかりません。
代わりに、サービスはユニットファイルを使用してatd
によって直接起動されます。ただし、そのファイルを直接編集するのではなく、 @muruの優れた回答で説明されているように、 を使用してカスタム構成を作成する必要があります。systemd
/lib/systemd/system/atd.service
systemctl edit
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.