Linuxで systemctl
というコマンドを使おうとしたとき、こんなエラーが出たことはありませんか?
System has not been booted with systemd as init system (PID 1). Can't operate.
このエラーは「systemdが起動システムとして動いていないので、systemctlは使えません」という意味です。
簡単に言うと:
あなたの環境では systemctl というコマンドが使えない状態になっているということです。
エラーが出る理由
このエラーが出るのは、あなたのLinux環境が「systemd」以外の方法で起動しているからです。
systemdとは、Linuxを起動するときに最初に動くプログラムのことです。
このプログラムがないと、systemctlコマンドは動きません。
よくある原因
WSL(Windows上のLinux)の古いバージョン
- WSL1や古いWSL2では、systemdが使えません
- 新しいWSL2なら設定で有効にできます
Docker(コンテナ環境)
- 軽量なDockerイメージではsystemdが含まれていません
- 特にAlpine LinuxやminimalなUbuntuイメージで発生します
軽量なLinux環境
- 組み込み機器用のLinuxなど
- runit、OpenRC、SysVinitなど別の起動システムを使っている
解決方法
自分の環境を確認する
まず、どの起動システムが使われているか確認しましょう:
ps -p 1 -o comm=
結果の見方
systemd
と表示される → systemdが使える環境init
と表示される → 古い起動システムrunit
と表示される → runitという起動システム
WSLでsystemdを有効にする方法
必要な条件
- Windows 11を使っている
- WSL2を使っている
- Ubuntu 22.04以降を使っている
設定手順
- WSLのUbuntuで以下のファイルを作成・編集します:
sudo nano /etc/wsl.conf
- ファイルに以下を書きます:
[boot]
systemd=true
- ファイルを保存して、WSLを完全に終了します:
wsl --shutdown
- WSLを再度起動して、systemctlが使えるか確認します
Dockerでsystemdを使う方法
通常のDockerイメージではsystemdは動きません。systemd対応のイメージを使う必要があります:
# systemd対応のUbuntuコンテナを起動
docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ubuntu:22.04
または、systemd専用のイメージを使います:
docker run --privileged centos/systemd
systemctlの代わりに使えるコマンド
systemctlが使えない環境でも、似たような操作ができます:
サービスを起動・停止する
# 古い方法でサービスを起動
sudo /etc/init.d/apache2 start
# または
sudo service apache2 start
サービスの状態を確認する
# 動いているプロセスを確認
ps aux | grep apache2
# または
sudo service apache2 status
ログを確認する
# ログファイルを直接見る
sudo cat /var/log/apache2/error.log
# または
sudo tail -f /var/log/syslog
まとめ
このエラーは、あなたの入力ミスではありません。使っているLinux環境がsystemdに対応していないことが原因です。
大切なポイント
- systemctlはsystemdがある環境でしか使えない
- WSL2なら設定で有効にできる
- 他の環境では代替コマンドを使う
- エラーが出ても慌てず、環境を確認する
環境別の対応方法まとめ
環境 | 対応方法 |
---|---|
WSL2(新) | wsl.confでsystemdを有効化 |
WSL1(古) | 代替コマンドを使用 |
Docker | systemd対応イメージを使用 |
通常のLinux | 通常はsystemdが使える |
軽量Linux | 代替コマンドを使用 |
よくある質問
Q: Windows 10でもsystemdは使えますか?
A: いいえ、Windows 11のWSL2でのみ対応しています。
Q: エラーが出てもLinux自体は正常ですか?
A: はい、システムは正常です。systemctlが使えないだけです。
Q: どうしてもsystemctlを使いたい場合は?
A: systemd対応の環境に移行するか、仮想マシンを使ってください。
コメント