如何在 Ubuntu 16.04 中將命令列參數傳遞給 atd init 腳本

如何在 Ubuntu 16.04 中將命令列參數傳遞給 atd init 腳本

如何將命令列參數傳遞給 atd 守護進程,該守護進程將在重新啟動和軟體包升級後持續存在?我希望為 atd 添加命令列標誌,-l 7.5因為我有一個 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

我嘗試將 -l 7.5 添加到 start) 部分中 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 初始化相容模式,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.

相關內容