/etc/event.dディレクトリのジョブ定義ファイル
UbuntuにおけるSysVinitからUpstart initへの移行に伴い、/etc/event.dディレクトリに定義されるジョブの数は増えることになる。ここでは、Upstartパッケージによってこのディレクトリに置かれたジョブのいくつかを説明する。
/etc/event.d/rc2というジョブ定義ファイルは、その他のrc?タスクによく似たrc2タスクを定義したものだ。このrc2タスクは、システムがマルチユーザモード(イベント名は「runlevel 2」)に入ると起動され、システムがそれ以外の実行レベル(「runlevel [!2]」)に移ると停止する。スクリプトの最初の部分は、runlevelユーティリティを呼び出している。これにより、システムを実行レベル2に移行させ(Upstartには実際の実行レベルは存在しない)、2つの変数に値が割り当てられる。実際に作業を行うのはexecコマンドであり、2という引数を用いて/etc/init.d/rcスクリプトが実行される。このスクリプトは、/etc/rc?.dディレクトリから引数に対応したリンク先を呼び出す。この場合はrc2のタスクによって、/etc/rc2.dディレクトリ内のリンク先にあたるinitスクリプトが実行される。
$ cat /etc/event.d/rc2
# rc2 - runlevel 2 compatibility
#
# This task runs the old sysv-rc runlevel 2 ("multi-user") scripts. It
# is usually started by the telinit compatibility wrapper.
start on runlevel 2
stop on runlevel [!2]
console output
script
set $(runlevel --set 2 || true)
if [ "$1" != "unknown" ]; then
PREVLEVEL=$1
RUNLEVEL=$2
export PREVLEVEL RUNLEVEL
fi
exec /etc/init.d/rc 2
end script
ttyサービス
以下に示すのは、tty1のgettyプロセスを起動して監視するサービスのためのジョブ定義ファイルである。
$ cat /etc/event.d/tty1 # tty1 getty # # This service maintains a getty on tty1 from the point when # the system is started until it is shut down again. start on runlevel 2 start on runlevel 3 start on runlevel 4 start on runlevel 5 stop on runlevel 0 stop on runlevel 1 stop on runlevel 6 respawn exec /sbin/getty 38400 tty1
このサービスは、実行レベルが2~5のいずれかのイベント発生時(つまり、システムがマルチユーザモードに入ったとき)にgettyプロセスを起動し、実行レベルが0、1、6のいずれかになったとき(つまり、システムのシャットダウン、シングルユーザモードへの移行、リブートが行われたとき)に停止する。「respawn」キーワードは終了時にジョブを再起動するようにinitに指示するものであり、「exec」はtt1のgettyプロセスをボーレート38,400で実行する。以下のinitctlはtty1サービスが起動されてプロセス4747として稼動中であることを、psはこのプロセスに関する情報をそれぞれ示している。
$ sudo initctl list tty1 tty1 (start) running, process 4747 $ ps -ef | grep 4747 root 4747 1 0 Jul02 tty1 00:00:00 /sbin/getty 38400 tty1
