如何将命令行参数传递给 atd 守护程序,该参数将在重新启动和软件包升级后继续存在?我希望将命令行标志添加-l 7.5
到 atd,因为我有一个 8-CPU 服务器,并且不想在运行批处理作业之前等待负载级别低于编译值 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
我尝试在 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.