コース一覧
LinuC レベル1 102試験対策(LPIC-1対応)
サービス管理の試験形式

LinuC レベル1 102試験対策(LPIC-1対応)

LinuC レベル1/LPIC-1の102範囲を、シェル、ユーザーとセキュリティ、ネットワーク、システム管理の実機演習と章末問題で固めます。Linuxを安全に運用するための知識とコマンド操作を体系的に身につける25レッスンのコースです。

1
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
2
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
3
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
4
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分

サービス管理の試験形式

systemctl enable を打っただけでサービスが動き出すと思っていると、そこで詰まります。enable と start は完全に独立した操作です。ここと mask の強さ、[Install] の意味が出題の中心です。

enable は今すぐ起動せず、start は次回に効かない

ターミナル

systemctl start nginx        # 今動く。再起動したら止まったまま
systemctl enable nginx       # 今は動かない。次回の起動から動く
systemctl enable --now nginx # 両方

enable が実際にしているのは、ユニットファイルの [Install] セクションを読み、WantedBy で指定されたターゲットの .wants ディレクトリにシンボリックリンクを作ることです。disable はそのリンクを消すだけです。

残りは、restart が停止してから起動、reload がプロセスを落とさず設定だけ再読み込み、status が状態と直近のログです。判定を返すのが is-active と is-enabled、一覧が list-unit-files です。

mask は disable より強い

disable はリンクを消すだけなので、systemctl start を打てば普通に起動しますし、他のユニットが依存していればそちらの都合で勝手に起動してしまいます。mask は /etc/systemd/system/<ユニット名> を /dev/null へのシンボリックリンクにすることで、完全に起動不能にします。手動の start も拒否され、依存起動も封じられます。解除は unmask です。

状態手動の start依存による起動次回起動時
enabled起動する起動する起動する
disabled起動する起動する起動しない
masked失敗する起動しない起動しない

unit ファイルは3つのセクションでできている

プレーンテキスト

[Unit]
Description=My sample service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/myservice
Restart=on-failure

[Install]
WantedBy=multi-user.target

[Unit] は説明と他のユニットとの関係、[Service] は起動方法、[Install] は enable したときに何をするかです。[Install] が無いユニットは enable できません。

[Unit] では、After が指定したユニットの後に起動するという順序だけの指定で、Before がその逆です。Requires は強い依存で相手が起動できなければ自分も起動せず、Wants は弱い依存で相手が失敗しても自分は起動します。After は順序、Requires は依存、という区別が問われます。

[Service] の Type も頻出です。

Type意味
simpleExecStart のプロセスがそのまま本体。既定値
forkingプロセスがフォークして親が終了する従来型のデーモン
oneshot1回実行して終了する。終わるまで次に進まない
notify起動完了を systemd に自分で通知する

oneshot は使い捨ての処理に使い、RemainAfterExit=yes を添えると実行後も active 扱いのままにできます。

置き場所には優先順位があり、変更には daemon-reload が要る

管理者が自分で置く /etc/systemd/system/ が最も優先され、パッケージが置く配布元の定義 /lib/systemd/system/ が最も低い優先度です。だからパッケージの定義を直接編集せず、/etc/systemd/system/ に置いて上書きするのが正しい作法です。一部だけ変えたいなら systemctl edit で drop-in を作ります。

ユニットファイルを追加・編集したら systemctl daemon-reload が必要です。忘れると変更が反映されません。定番の落とし穴です。

試験で狙われるところ

SysVinit との対応も出ます。chkconfig が enable と disable、service が start と stop に対応する、と覚えます。

そのほかは、enable は今すぐ起動せず start は次回に効かないこと、mask が依存起動まで封じること、ユニットを書き換えたら daemon-reload が要ること、[Install] の無いユニットは enable できないこと、そして restart は必ず一度停止するので無停止で設定だけ入れたいなら reload を使うことです。

ヒント

①方針 ユニットファイルを書く、読み直させる、有効にする、起動する、の4段です。enable と start は別物なので両方打つ必要があります。最後に mask を1つ

②使うコマンド ファイルは cat <<EOF > <パス> ... EOF で書きます。読み直しは systemctl daemon-reload、自動起動は systemctl enable <名前>、今すぐ動かすのは systemctl start <名前>、起動不能にするのは systemctl mask <名前> です

③部分解 [Unit] に Description=、[Service] に Type=oneshot と ExecStart=/bin/sh -c 'echo hello > /var/log/linuc-hello.log'、[Install] に WantedBy=multi-user.target。書いたら daemon-reload、enable linuc-hello.service、start linuc-hello.service、最後に mask nginx です

  • 1. /etc/systemd/system/linuc-hello.service を作る
  • 2. [Unit] に Description、[Service] に Type=oneshot と ExecStart、[Install] に WantedBy=multi-user.target を書く
  • 3. ExecStart は /bin/sh -c 'echo hello > /var/log/linuc-hello.log' とする
  • 4. systemctl daemon-reload でユニットを読み直させる
  • 5. systemctl enable linuc-hello.service で自動起動を有効にする
  • 6. systemctl start linuc-hello.service で今すぐ実行し、/var/log/linuc-hello.log ができることを確かめる
  • 7. systemctl mask nginx を実行し、systemctl is-enabled nginx が masked を返すことを確かめる

Linux は使うときに起動します(初回は約102MB通信します)

5 項目で採点します