\r\n\r\n
ブート時にLinuxのプログラムを起動する必要がありますか?systemdソフトウェアは、現在Ubuntuを含むほとんどのバージョンで利用可能なsystemdを使って、あらゆるLinuxディストリビューションでこれを行う方法を提供します。統合サービスを作るプロセスを説明し、さらに雑誌と対話します。
このチュートリアルでは、システム起動時にシステムサービスを開始するように設定する方法を紹介します。ログオン時にグラフィックプログラムを開始するには、代わりにデスクトップのスタートアップマネージャーを使用します。
コンピュータにインストールしたソフトウェアがLinuxのブートプロセスに接続し、コンピュータを起動するたびにプログラムが自動的に起動するようになることがあります。自作のプログラムやスクリプト、あるいはコンピュータ上の他のプログラムでも、同じ動作を簡単に実現することができます。
スタートアップ時に起動するプロセスは、システムと***ウェアsystemdによって制御されます。systemdはスタートアップ時に最初に実行されるプロセスです。常にプロセスID(PID)1を持っています。コンピュータで動作している他のすべてのプロセスは、systemdによって、またはsystemdによってすでに開始されているプロセスによって開始されます。
バックグラウンドで動作するプログラムは、デーモンまたはサービスと呼ばれます。systemdの末尾の「d」は、デーモンの略です。今回は、サンプルサービスを作成します。私たちが提供するサービスは、次のようなものでなければなりません。
systemd が起動するプログラムが必要です。htg.sh Inc "という簡単なスクリプトを作成します。このチュートリアルでは、テキストエディタGeditを使用していますが、お好きなテキストエディタを使用することができます。
touch htg.sh gedit htg.shgeditエディタが開きますので、以下のテキストをコピーしてエディタに貼り付けてください。
#!/bin/bash echo "htg.service: ## Starting ##" | systemd-cat -p info while : do TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') echo "htg.service: timestamp ${TIMESTAMP}" | systemd-cat -p info sleep 60 done変更を保存して、エディターを閉じます。
脚本にはあまり手を入れていませんが、特筆すべき点がいくつかあります。
このスクリプトを/usr/local/binディレクトリにコピーします。
sudo cp htg.sh /usr/local/bin実行可能な状態にする必要があります。
sudo chmod +x /usr/local/bin/htg.shsystemdが起動する各プログラムは、サービスユニットファイルと呼ばれる定義ファイルを持っています。systemd がプログラムの位置を特定し、起動し、その動作を定義するために使う特定のプロパティを含んでいます。
新しいサービスのためにユニットファイルを作成する必要がありますが、既存のユニットファイルの中に新しいサービスに必要な名前がないことを確認することが賢明です。
sudo systemctl list-unit-files --type-serviceユニットファイルのアルファベット順のリストをスクロールして、使用する名前が使用されていないことを確認することができます。
このサービスは "htg service "という名前になります。 この名前を持つユニットファイルはありませんので、先にユニットファイルを作成します。
sudo gedit /etc/systemd/system/htg.servicegeditエディタが開きますので、以下のテキストをコピーしてエディタに貼り付けてください。
[Unit] Description=How-To Geek Service Example Wants=network.target After=syslog.target network-online.target [Service] Type=simple ExecStart=/usr/local/bin/htg.sh Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target変更を保存して、エディターを閉じます。
これらの項目は、以下のような意味を持ちます。これらは代表的な項目です。私たちのシンプルなサービスには、実際にはほとんど必要ないのですが、それらを含めることで解釈できるようになります。
ユニットファイルは実行可能である必要はありませんが、ユニットファイルのパーミッションは、編集できる人を制限する必要があります。悪意のあるユーザーや悪意のあるユーザーがユニットファイルを変更して、まったく別のプログラムを実行するようにすることは避けたいものです。
このコマンドは、オーナーに読み取りと書き込みのアクセス権を与え、グループには読み取りアクセス権を与え、それ以外の人はアクセスできません。
sudo chmod 640 /etc/systemd/system/htg.serviceサービスがまだ稼働していなくても、systemctl にユニットファイルのシンタックスをチェックさせることができるのです。エラーが発生した場合は、報告されます。(実際、ほとんどのコマンドで「サービス」セクションは任意です)。
systemctl status htg.serviceエラーがハイライトされないということは、ユニットファイルの言語が **正確であることを意味します。
新しいユニットファイルを追加したり、既存のユニットファイルを編集したりする場合、systemd にユニットファイルの定義を再読み込みするように通知する必要があります。
sudo systemctl daemon-reloadブート時にサービスを開始する場合は、有効にする必要があります。
sudo systemctl enable htgサービスを有効にしても起動はせず、ブート時に起動するように設定するだけです。サービスをすぐに開始するには、systemctl と start オプションを組み合わせて使用する必要があります。
sudo systemctl start htgサービスを手動で起動するか、コンピュータを再起動すると、サービスが正常に動作していることを確認できます。
sudo systemctl status htg.serviceサービスの状況が表示されるようになります。
また、このサービスが生成した直近の10件のジャーナルを表示すると、当然のことながら、すべて1分間隔になっています。
サービスを停止する必要がある場合は、次のコマンドを使用します。
sudo systemctl stop htg.serviceこれでサービスは停止しますが、次回コンピュータを再起動したときの再起動は防げません。起動時にサービスが開始されないようにするには、サービスを無効にする必要があります。
sudo systemctl disable htg.serviceサービスが動作している場合、このコマンドはサービスを停止しません。単に systemd に次の再起動でサービスを開始しないように指示します。
サービスを停止し、起動時にサービスを開始しないようにするには、両方のコマンドを使用します。
サービスとしての起動を試みる前に、プログラムが期待通りに動作していることを確認してください。