Linux のユーザー、特に Ubuntu のような最新のディストロを使っている開発者にとって、最も強力で便利なツールの一つが systemctlコマンド。このコマンドラインユーティリティは通常、systemd(システムおよびサービスマネージャー)と対話するために使用されます。
systemctl コマンドを使えば、システムサービスの管理、ステータス確認、開始や停止、システム起動時の自動実行設定ができます。便利ですよね。ただし systemctl コマンドが見つからないか認識されない場合は、次の問題に直面することになります。 "sudo: systemctl: コマンドが見つかりません" エラー
「systemctl: command not found」エラーが何を意味するのか、このエラーが発生する理由、そして解決方法について説明します。
systemctl: コマンドが見つかりません の意味は?
簡潔に言えば、「systemctl: command not found」エラーは、systemctl コマンドラインユーティリティが現在の環境で利用できない、またはアクセスできないことを意味します。これは様々な原因が考えられます。環境が非システム環境であるか、systemd パッケージがシステムにインストールされていないのいずれかが原因です。
systemd パッケージがインストールされていないか、お使いの Linux ディストロまたはバージョンが systemd を使用していない可能性があります。その場合、init.d のような古いサービス管理システムを使用しています。もう一つの可能性として、PATH 環境変数に systemctl が配置されているディレクトリが含まれていないため、シェルが見つけられないということも考えられます。
「systemctl: command not found」エラーの原因がどこにあるかをある程度把握したところで、実際に問題の場所を特定し、修正する方法を見ていきましょう。
systemctl: コマンドが見つかりません エラーの解決方法
以下のステップでは、お客様のシステムに systemd がインストールされているか、systemctl を使用しているかを確認し、systemctl のパスをチェックします。問題を確認した後、エラーを修正するための対応を行います。
1. システムが systemd を使用しているかどうかの確認
Ubuntu 以降、systemctl は systemd パッケージがインストールされている場合にのみ使用できるため、まず以下のコマンドを実行してシステムが systemd を使用するように設定されているか確認します。
ps -p 1 -o comm=
または、以下のコマンドで systemd のバージョンを確認することもできます。
systemd --version
出力が systemd の場合、systemd があなたのシステムの init システムです。Ubuntu の systemctl がインストールされているはずです。ただし、出力が init または別のプロセスマネージャーの場合は、システムが代替の初期化システムを使用しており、systemd に移行しない限り systemctl は機能しません。
Upstart や SysVinit といった古い初期化システムを使用している場合に、systemd に切り替えて systemctl を使用したい場合は、以下の手順に従ってください。
1. 次のコマンドを実行してsystemdをインストールし、systemctlをインストールします:
sudo apt install systemd-sysv
2. 次のコマンドを実行してシステムを再起動します:
sudo reboot
3. システムが現在systemdを使用していることを確認します:
ps -p 1 -o comm=
出力がsystemdになるはずです。
2. systemdが正しくインストールされていることを確認する
通常の場合、systemdがインストールされ、init システムとして実行されている場合、systemctlコマンドは正常に動作するはずです。そうでない場合、systemdパッケージが不足しているか、不正にインストールされている可能性があります。
Ubuntuの最小バージョン(Dockerコンテナやクラウドインスタンスなど)を使用している場合、systemdはデフォルトではインストールされていない可能性があります。systemdをインストールしてsystemctlをインストールするには、次のコマンドを実行してください:
sudo apt update sudo apt install systemd
インストール後、systemctlコマンドが使用可能であるかを確認してください。
3. systemctlのPATHを確認する
systemctlコマンドが見つからないエラーの一般的な原因は、systemctlはインストールされているが、システムのPATHに含まれていない場合です。systemdバイナリが/bin、/usr/bin、/usr/local/binなどの標準的なディレクトリに存在するかを確認するには、次のコマンドを使用できます:
which systemctl
systemctlがPATHに含まれるディレクトリのいずれかで見つかった場合、次のような出力が得られます:
/usr/bin/systemctl
systemctlがPATHのディレクトリのいずれかで見つからない場合、whichコマンドは何も返しません。
ただし、systemctlがディレクトリで見つかった場合でも、systemctlが機能しない可能性があります。これは、systemctlが含まれていないディレクトリに配置されている可能性があるためです。このような状況では、次のコマンドを使用してsystemctlが配置されているディレクトリがシステムの一部であるかを確認する必要があります:
echo $PATH
出力は次のようになるはずです:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
次に、systemctlが配置されているディレクトリ(whichコマンドから取得)がecho $PATHコマンドの出力に含まれているディレクトリのリストに含まれているかを確認するだけです。
systemctlのディレクトリがecho $PATHの出力に含まれていない場合は、PATH変数に追加する必要があります。これを行うには、次のコマンドを実行する必要があります:
ため Bashシェルユーザーの場合、テキストエディターで~/.bashrcファイルを開きます:
nano ~/.bashrc
ファイルの最後に次の行を追加します:
export PATH=$PATH:/usr/bin
/usr/binはこの例ではsystemctlが配置されている典型的なディレクトリです。
CTRL + Xキーを押してファイルを保存して閉じ、Yキーを押して確認してから、Enterキーを押して保存します。
ため Zshユーザー、テキストエディターで~/.zshrcファイルを開きます:
nano ~/.zshrc
ファイルの最後に次の行を追加します:
export PATH=$PATH:/usr/bin
/usr/binはこの例ではsystemctlが配置されている典型的なディレクトリです。
CTRL + Xキーを押してファイルを保存して閉じ、Yキーを押して確認してから、Enterキーを押して保存します。
上記の手順を完了したら、echo $PATHコマンドを使用してsystemctlのディレクトリがPATHに追加されたことを確認します。これで、「systemctl: コマンドが見つかりません」エラーに遭遇することなくsystemctlを実行できるようになるはずです。
4. systemdの再インストール
前述の修正が機能せず、引き続きコマンドが見つからないエラーが発生している場合は、systemdを完全に再インストールすることで問題が解決される可能性があります。これを行うには、次のコマンドを実行してください:
sudo apt purge systemd sudo apt install systemd
次に、このコマンドでシステムを再起動します:
sudo reboot
systemctl が正常に動作しているか確認してください。
5. systemd が正しく設定されているか確認する
systemd のインストールが正しく設定されていないため、「systemctl: コマンドが見つかりません」というエラーが発生することがあります。この問題を解決するには、以下のコマンドを実行するだけです。
sudo dpkg-reconfigure systemd
6. Windows Subsystem for Linux が古い (WSL)
Ubuntu を Windows Subsystem for Linux (WSL) で使用している場合、 WSL (Windows Subsystem for Linux) 古いバージョンの WSL (WSL 1 など) は systemctl をネイティブでサポートしていないため、前述の修正方法を使用しても systemctl を実行することができません。
systemctl の機能を利用するには、systemd をより適切にサポートする WSL 2 にアップグレードする必要があります。WSL を使用しているかどうか不確実な場合は、以下のコマンドで確認できます。
uname -a
出力に WSL が表示される場合、それが「systemctl: コマンドが見つかりません」エラーが表示されている理由です。
7. systemctl の代わりに sudo service コマンドを使用する
システムが systemd を使用していないため「systemctl: コマンドが見つかりません」エラーが発生している場合、sudo service コマンドを使用してサービスを管理できます。このコマンドは SysVinit や Upstart などの古い init システムで動作します。systemd ではなく init スクリプトに依存する Ubuntu システムに有用です。
たとえば、サービスを開始するには、以下のコマンドを実行します。
sudo service <service_name> start
最後に
systemd とそのコマンドラインユーティリティである systemctl は、SysVinit や Upstart などのほとんどの古い init システムに置き換わりました。systemd のモノリシックな設計と UNIX 哲学との不一致により、全員に好まれているわけではありませんが、systemd は一般的に主流の選択肢と見なされています。systemctl コマンドが利用できないと systemd の機能が大幅に制限されるため、systemctl コマンドが見つからないエラーを解決できたことを願っています。
よくあるご質問
systemctl とは何か。また「systemctl: コマンドが見つかりません」エラーとは何を意味するのか。
systemctl は、systemd を実行している Linux システム (Ubuntu など) でサービスを管理するために使用されるコマンドラインツールです。「systemctl: コマンドが見つかりません」エラーは、ツールが利用できないか、アクセスできない場合に発生します。通常、システムが systemd を使用していないか、systemd パッケージがインストールされていないためです。
systemctl はすべてのバージョンの Ubuntu で利用可能ですか。
いいえ、systemctl はすべてのバージョンの Ubuntu で利用可能ではありません。systemctl は systemd init システムの一部であり、最新の Ubuntu バージョン (15.04 以降) ではデフォルトです。古いバージョンまたは特定の最小限のインストールでは、代わりに SysVinit や Upstart などの代替 init システムを使用する場合があります。