コース一覧
LinuC レベル1(LPIC-1対応)対策
systemdタイマー

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

ブートとsystemd、パッケージ管理(APT/RPM両系統)、コマンドとviの操作、ファイルシステム、シェルスクリプト、ユーザー管理とセキュリティ、ネットワークまで、LinuC レベル1(LPIC-1対応)の全出題範囲を、毎レッスン実際にコマンドを打って確かめながら学べる対策コースです。ブラウザの中で本物の Debian 12 が動いていて、62レッスンのうち36本は読むだけで終わらず、自分の手でコマンドを打った結果で採点されます。Linux入門を修了した方を対象としています。101・102それぞれの模試60問で分野別の弱点を洗い出し、直前チェックで暗記事項を固めてから本番に臨めます。

1
試験ガイダンス
01. LinuC/LPICとは15分
02. LinuCとLPICの選び方15分
03. 学習計画15分
04. 出題形式を体験15分
2
101 ブートとアーキテクチャ
01. ブートの流れ18分
02. GRUB15分
03. systemdとターゲット18分
04. ハードウェア情報18分
05. カーネルモジュール18分
06. 過去問 アーキテクチャ15分
3
101 パッケージ管理
01. Debian系パッケージ18分
02. RPM系パッケージ15分
03. 両系統の対応表15分
04. リポジトリ管理18分
05. 共有ライブラリ18分
06. 過去問 パッケージ管理15分
4
101 GNU/Unixコマンド
01. ファイル操作の試験オプション18分
02. テキスト処理18分
03. ストリームとリダイレクト18分
04. プロセス監視18分
05. 優先度18分
06. grepと正規表現18分
07. viの操作15分
08. 過去問 コマンド15分
5
101 ファイルシステム
01. パーティション15分
02. 作成とマウント18分
03. fstabとUUID18分
04. パーミッションとリンク18分
05. 容量とクォータ18分
06. findとlocate18分
07. 過去問 ファイルシステム15分
6
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
7
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
8
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
9
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分
10
模試と直前対策
01. 模試 10190分
02. 101弱点復習15分
03. 模試 10290分
04. 102弱点復習15分
05. 直前チェック15分
06. 受験と次のステップ15分

systemdタイマー

前のレッスンでは cron が入っておらず実機で試せませんでしたが、この機械では systemd タイマーが本当に動きます。systemctl list-timers を打てば apt-daily.timer などが現に動いているのが見えます。定期実行の感覚は、ここで手を動かしてつかんでください。

「いつ」と「何を」が別のファイルに分かれる

cron では1行に「いつ」と「何を」の両方を書きました。systemd はこれを2つに分け、いつ実行するかを .timer の OnCalendar などに、何を実行するかを .service の ExecStart に書きます。

拡張子より前の名前を揃えるのが基本です。backup.timer は既定で backup.service を起動します。別の名前のサービスを起こしたいときだけ、[Timer] セクションに Unit= を書いて明示します。

置き場所は、管理者が自分で作るユニットなら /etc/systemd/system/ です。パッケージ提供のものは /lib/systemd/system/ にあり、同名を /etc/systemd/system/ に置くとそちらが優先されます。

サービス側は [Unit] に Description=、[Service] に Type=oneshot と ExecStart= を書きます。oneshot は一度走って終わる処理を表し、付けないと systemd がプロセスの終了を異常とみなすことがあります。タイマーから起動されるサービスには [Install] を書かず、enable もしません。起動はタイマーに任せるからです。

OnCalendar は 年-月-日 のあとに 時-分-秒

基本の形は曜日と年-月-日と時-分-秒です。曜日は省略でき、* は cron と同じく「すべて」です。

書き方いつ
*-*-* 03:00:00毎日 3時
*-*-* *:00:00毎正時
Mon..Fri *-*-* 09:00:00平日の 9時
*-*-* *:0/15:0015分おき

hourly daily weekly monthly yearly という短縮語も使えます。書式に自信がないときは次のコマンドで確かめられます。次に実行される時刻まで出るので、覚え違いをその場で見つけられます。

ターミナル

systemd-analyze calendar 'Mon..Fri *-*-* 09:00:00'

タイマー側は [Timer] に OnCalendar= を、[Install] に WantedBy=timers.target を書きます。この WantedBy は決まり文句で、無いと enable しても起動時に有効になりません。

出来事からの経過時間でも指定できる

絶対時刻ではなく、ある出来事からの経過時間でも指定できます。OnBootSec= は起動から、OnActiveSec= はタイマーが有効になってから、OnUnitActiveSec= は対象サービスが最後に起動してから、OnUnitInactiveSec= は最後に終了してからの経過時間です。

OnBootSec=5min と OnUnitActiveSec=1h を組み合わせると、起動5分後に初回、その後は1時間おき、という動きになります。cron には無い表現で、起動直後の混雑を避けたいときに使います。

また、電源が入っていなくて飛んだ回を取り返したいときは Persistent=true を書きます。cron では anacron が要りましたが、systemd はこの1行です。最後に実行した時刻が記録され、次の起動時に本来なら実行されているはずだったと判断されればすぐ走ります。

enable は次回から、start は今すぐ

ファイルを置いただけでは systemd はそれを知りません。読み直させてから有効にします。

ターミナル

systemctl daemon-reload # ユニットファイルを読み直す systemctl enable --now sample.timer # 起動時に有効化し、いま起動もする systemctl list-timers --all # 停止中を含めてタイマーの一覧

enable は次回の起動から、start はいま、--now は両方、という区別は必ず問われます。有効にするのは .timer のほうで、.service を enable するのではありません。

実行結果は journald に集まります。cron のようにメールの設定に左右されず、journalctl -u sample.service のようにユニット名で絞り込めるのが利点です。

試験で狙われるところ

.timer と .service は対で、.timer だけでは何も実行されません。有効化するのは .timer のほうです。ユニットファイルを置いたら daemon-reload が要ります。Persistent=true は取りこぼしの救済であって、遅延実行の指定ではありません。

ヒント

ファイルはヒアドキュメントで書けます。cat <<'EOF' > /etc/systemd/system/linuc-report.service で始め、最後に EOF だけの行で閉じます

service には [Unit] と [Service] の2つ、timer には [Unit] と [Timer] と [Install] の3つのセクションを書きます。timer の [Install] を忘れると enable が失敗します

ファイルを置いたら必ず systemctl daemon-reload です。そのあと systemctl enable --now linuc-report.timer で有効化と起動を一度に行えます

  • 1. cat <<'EOF' > /etc/systemd/system/linuc-report.service で service ファイルを書く。[Service] に Type=oneshot と ExecStart を書く
  • 2. cat <<'EOF' > /etc/systemd/system/linuc-report.timer で timer ファイルを書く。[Timer] に OnCalendar=*-*-* *:*:00、[Install] に WantedBy=timers.target を書く
  • 3. systemd-analyze calendar '*-*-* *:*:00' で書式が正しいか確かめる
  • 4. systemctl daemon-reload でユニットファイルを読み直させる
  • 5. systemctl enable --now linuc-report.timer で有効化して起動する
  • 6. systemctl list-timers で自分のタイマーが並んでいるのを確かめる
  • 7. journalctl -u linuc-report.service で実行結果を見る

7 項目で採点します