我正在使用 启动非交互式作业batch
,并且我想增加负载限制因子以使用我的所有 8 个核心。我使用的是 Ubuntu 16.04 LTS。
据我了解,batch
用于atd
完成工作。当负载因子低于阈值(称为阈值)时,作业就会启动负载限制系数。据说我们可以使用选项man
来atd
改变这个因素-l
。
我的问题:我该如何使用这个atd -l XX
选项?例如,当我输入atd -l 7.2
before时batch
,它似乎没有改变任何东西。
到目前为止我发现了什么:
- 在这个问题中如何通过多线程运行bash脚本,一位贡献者建议在“服务启动脚本”中执行此操作
atd
。我猜它指的是/etc/init.d/atd
,但我不知道要更改什么,请参见下一个要点。 - 我找到了页面,例如这一页http://searchitchannel.techtarget.com/feature/Understanding-run-level-scripts-in-Fedora-11-and-RHEL,他们建议:“修改脚本的以下行(在开始部分)
/etc/init.d/atd
:daemon /usr/sbin/atd
将其替换为此行,使用参数-l
指定新的最小系统负载值:daemon /usr/sbin/atd -l 1.6
”。然而, 中没有这样的一行/etc/init.d/atd
。
好像可以在 里介绍/etc/init.d/atd
,但不知道在哪里。我从未更改过此类文件。
那么,如何更改batch
命令使用的负载限制因子呢?
答案1
找到了解决办法:
- 创建一个文件:
/etc/init/atd.override
- 添加一行
exec atd -l 7.2
- 然后
sudo service atd restart
它与“Upstart init daemon”的工作方式有关。那里的解释:http://linux.die.net/man/5/init
如果文件/etc/init/atd.override
已存在且包含以 开头的行exec
,请编辑该行。
答案2
/lib/systemd/system/atd.service
在 Ubuntu 16.04 / systemd 上编辑。
附加-l «load avg»
到后ExecStart
:
$ cat /lib/systemd/system/atd.service
[Unit]
Description=Deferred execution scheduler
Documentation=man:atd(8)
[Service]
ExecStart=/usr/sbin/atd -f -l 7.2
IgnoreSIGPIPE=false
[Install]
WantedBy=multi-user.targe
运行时您会看到一条消息systemctl status atd
或 ( service atd status
):
警告:磁盘上的 atd.service 已更改。运行“systemctl daemon-reload”来重新加载单元。
运行该命令可以消除警告,但要真正接受更改,需要通过systemctl restart atd
(重新启动服务service atd restart)
。
答案3
这建立在韦斯利·B 的回答。如果使用 则适用systemctl
。不是直接更新服务配置,而是覆盖可以为其定义。最好这样做,因为操作系统可以随时替换服务配置。这个答案是在 Ubuntu 21.10 上测试的。
- 运行
sudo systemctl edit atd
并插入:
[Service]
ExecStart=
ExecStart=/usr/sbin/atd -f -l 3.0 -b 5
上面,没有值的行ExecStart=
是使旧值失效所必需的。在下一行中,根据需要设置-l
和的值-b
,参考其男人页。
这会将以上行写入/etc/systemd/system/atd.service.d/override.conf
.如果添加此文件时没有添加systemctl edit
,则sudo systemctl daemon-reload
可能需要运行。
跑步
sudo systemctl restart atd
。验证状态:
systemctl status atd
ps aux | grep [a]td
这些应该显示服务和进程状态,两者都带有自定义参数。
答案4
我附近没有 Ubuntu 16.04 LTS,但在基于 Debian 的系统上 /etc/init.d/atd
通常会这样说:
case "$1" in
start)
log_daemon_msg "Starting deferred execution scheduler" "atd"
start_daemon -p $PIDFILE $DAEMON -l 7
log_end_msg $?
请注意我添加-l 7
部分的位置。然后您需要重新启动/etc/init.d/atd restart
,并检查ps auxwww|grep atd
是否被接受。
请注意,有时您会选择/etc/default/atd
哪种更简单的方法(而且更好,因为您的更改不会在下次升级时默默地擦除)