4,102 瀏覽數

upstart – initctl

在 Ubuntu 環境透過 upstart init 所啟動的 daemon (服務),如需要改變狀態時則需要透過 #initctl 這個指令來進行互動 (RedHat 則是透過 systemctl ).所以 #initctl 這個指令在 upstart 環境佔蠻重要的地位,所以特別拿出來做說明.

關於 upstart 請先參考 http://benjr.tw/10578

  • #initctl version (Request the version of the init daemon)
    看目前 upstart 使用的版本.

    root@ubuntu:~# initctl version
    init (upstart 1.12.1)
    
  • #initctl help (Display list of commands)
    不知道要怎麼使用 initctl ,可以先看看 help 的說明.

    root@ubuntu:~# initctl help
    Job commands:
      start                       Start job.
      stop                        Stop job.
      restart                     Restart job.
      reload                      Send HUP signal to job.
      status                      Query status of job.
      list                        List known jobs.
    
    Event commands:
      emit                        Emit an event.
    
    Environment commands:
      get-env                     Retrieve value of a job environment variable.
      list-env                    Show all job environment variables.
      reset-env                   Revert all job environment variable changes.
      set-env                     Set a job environment variable.
      unset-env                   Remove a job environment variable.
    
    Other commands:
      reload-configuration        Reload the configuration of the init daemon.
      version                     Request the version of the init daemon.
      log-priority                Change the minimum priority of log messages from the init daemon.
      show-config                 Show emits, start on and stop on details for job configurations.
      check-config                Check for unreachable jobs/event conditions.
      usage                       Show job usage message if available.
      notify-dbus-address         Inform Upstart of D-Bus address to connect to.
      notify-disk-writeable       Inform Upstart that disk is now writeable.
      list-sessions               List all sessions.
      help                        display list of commands
    
    For more information on a command, try `initctl COMMAND --help'.
    

首先先來看 Job commands ,不過每次要打這麼長一串的指令,實在很累人,所以系統已經將一些常用的幾個參數建立好連結成為獨立的指令 如 reload, restart, start, status, stop 都是 initctl 的連結

  • #initctl list (List known jobs)
    list 主要就是看目前 job 的狀態清單

    root@ubuntu:~# initctl list
    avahi-cups-reload stop/waiting
    avahi-daemon start/running, process 540
    mountall-net stop/waiting
    mountnfs-bootclean.sh start/running
    passwd stop/waiting
    initctl check-config	Check for unreachable jobs/event conditions	
    initctl emit	Emit an event	
    initctl get-env	Retrieve a variable from the job environment table
    ...........
    
  • #initctl status (Query status of job)
    查詢單一 Job 的狀態, initctl status 指令太長可以直接使用 status 這個連結 /sbin/status -> initctl*

    root@ubuntu:~# initctl status bluetooth
    bluetooth start/running, process 5047
    root@ubuntu:~# status bluetooth
    bluetooth start/running, process 5047
    
  • #initctl start (Start job, 啟動指定的 Job)
    initctl start 指令太長可以直接使用 status 這個連結 /sbin/start -> initctl*
  • #initctl stop (Stop job, 停止指定的 Job)
    initctl stop 指令太長可以直接使用 status 這個連結 /sbin/stop -> initctl*

    root@ubuntu:~# initctl stop bluetooth
    bluetooth stop/waiting
    root@ubuntu:~# initctl start bluetooth
    bluetooth start/running, process 4943
    
    root@ubuntu:~# stop bluetooth
    bluetooth stop/waiting
    root@ubuntu:~# start bluetooth
    bluetooth start/running, process 4943
    

    restart 跟 reload 的使用不太一樣,

  • #initctl restart (Restart job)
    initctl restart 指令太長可以直接使用 restart 這個連結 /sbin/restart -> initctl* ,工作 Job 會被 殺害 Kill 和重生 respawned, 請注意, restart 不會重新讀取設定檔,如果需要重新讀取設定檔請使用 #stop job ,然後 #start job

  • #initctl reload (Send HUP signal to job)
    initctl reload 指令太長可以直接使用 restart 這個連結 /sbin/reload -> initctl* ,這個指令會發送 SIGHUP 信號發送給該 Job,請該 Job 自行重新初始化本身,但需要注意的是相關的設定檔不重讀.

  • #initctl reload-configuration (Reload the configuration)
    剛剛的 #initctl reload 不會重讀設定檔,所以需要重讀設定檔的請使用這個指令

    root@ubuntu:~# initctl reload bluetooth
    root@ubuntu:~# reload bluetooth
    root@ubuntu:~# initctl reload-configuration bluetooth
    
    root@ubuntu:~# initctl restart bluetooth
    bluetooth start/running, process 5243
    root@ubuntu:~# restart bluetooth
    bluetooth start/running, process 5266
    

這邊看一下關於環境相關的指令,這邊的環境是指 Job 的環境跟 Linux 本身的環境設定 ( #env )好像不太一樣(我也不是很確定).

  • #initctl list-env (Show all job environment variables.)
    root@ubuntu:~# initctl list-env
    PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
    TERM=linux
    
  • #initctl get-env (Retrieve value of a job environment variable.)
  • #initctl reset-env (Revert all job environment variable changes.)
  • #initctl set-env (Set a job environment variable.)
  • #initctl unset-env (Remove a job environment variable.)

initctl 指令並不能來設定該 service / Job 在開機的時候跑來在一個 runlevel ,而且 Ubuntu 並沒有提供類似 #chkconfig 的指令,只能透過 upstart 設定檔,以 SSH 的 upstart 設定檔案為例.

root@ben-virtual-machine:~# cat /etc/init/ssh.conf 
# ssh - OpenBSD Secure Shell server
#
# The OpenSSH server provides secure shell access to the system.

description	"OpenSSH server"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 10 5
umask 022

env SSH_SIGSTOP=1
expect stop

# 'sshd -D' leaks stderr and confuses things in conjunction with 'console log'
console none

pre-start script
    test -x /usr/sbin/sshd || { stop; exit 0; }
    test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }

    mkdir -p -m0755 /var/run/sshd
end script

# if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
# 'exec' line here instead
exec /usr/sbin/sshd -D

定義如下:
start on runlevel [2345]
stop on runlevel [!2345]

開機進入 runlevel 2345 的時候需要執行,切換到 runlevel 2345 (不一樣的 runlevel 時) 需要停止.

要注意一點的是 Ubuntu 的 runlevel 跟 RedHat 的不太一樣.
0 : System halt.
1 : Single-User mode.
2 : Graphical multi-user plus networking (DEFAULT)
3 : Same as “2″, but not used.
4 : Same as “2″, but not used.
5 : Same as “2″, but not used.
6 : System reboot.

4 個網友的想法 “upstart – initctl

  1. 自動參照通知: Ubuntu Upstart – Benjr.tw

  2. 自動參照通知: RedHat – systemctl – Benjr.tw

  3. 自動參照通知: Linux command – service – Benjr.tw

  4. 自動參照通知: System V 與 Upstart | Benjr.tw

發表迴響