[これはsystemd-tmpfilesの問題に直接対処するものではありませんが、この特定のケースではechoを使用した方がよいことを既に認識していると思います。]
まず、「multi-user.target」は使用したい場合とそうでない場合があります。SysVスタイルのinitのランレベルの概念に精通している場合、マルチユーザーは、GUIではなくコンソールで起動するマルチユーザーシステムであるランレベル3と同等のsystemdです。Xから起動するランレベル5に相当するのは、graphical.targetです。デフォルトでは、シンボリックリンクにすることによって決定される/etc/systemd/system
(および/または/lib/systemd/system
、中の1つ/etc
の一方を却下します/lib
)と呼ばれるdefault.targetそれが指す場所を見つけるために、使用LSを:
»ls -l /etc/systemd/system/default.target
default.target -> /usr/lib/systemd/system/multi-user.target
通常のLinuxデスクトップでは、これはgraphical.targetになります。これは、デフォルトのランレベル/ターゲットが何であるかに関係なく、作成しているブートサービスを開始する場合、実際には重要ではありません。ただし、マルチユーザーを使用し、デフォルトがグラフィカルな場合、サービスは発生しません。
サービスに応じて、より適切で特定のターゲットまたはサービスが存在する可能性があります。他の質問に基づいて、default.targetはおそらく問題ありません。注として、「ターゲット」と「サービス」の違いは、サービスに[Service]
実際にプロセスを実行するセクションが含まれていることです。ターゲットは、さまざまな「depends」および「requires」ディレクティブを介してサービスをグループ化する方法です。他のターゲットやサービスをトリガーする以外に、それ自体は何もしません。
サービスが開始されるタイミングは、他のサービスが明示的に依存しているサービスによって決まります。ブートプロセスの後半で実行するこのような単純なスタンドアロンイベントの場合、次のディレクティブの組み合わせを使用できます。
[Unit]
After=default.target
[Install]
WantedBy=default.target
「インストール」セクションは、サービスのインストール時に使用されます。「WantedBy」は、このサービスに含めるターゲットを指定します(そのターゲットが実行する場合は実行されますが、nb。これは、他のサービスとの関連で実行されるタイミングを決定しません)。実際には、このサービスをより早くではなく後で実行するため、「After」句を指定します。これは、実際にはWantedByターゲットと同じである必要はなく(通常は同じではありません)、いつ発生してもかまわない場合は完全に省略することができます。私は、他のほとんどのものが指定されたものにチェーンされているものに関連して実行されるという予感で使用していますBefore=default.target
(これも使用できます。ターゲットの実行はターゲットが実行される前に評価されます)。
たとえば、「hello world」をコンソールにエコーします。サービス自体については、次の[Service]
セクションで説明します。
[Service]
Type=forking
ExecStart=/usr/local/bin/helloworld
コマンドにはフルパスが必要です。私が単に使用しなかった理由/usr/bin/echo "hello world"
は、それが機能しないことであり(出力は/ dev / nullに行くと思います)、echo "hello world" > /dev/console
意志を実行するサービスの間、ExecStartディレクティブでシェルリダイレクトを使用すると実験が実証されない。したがって、/ usr / local / bin / helloworldは、その1行のシェルスクリプトecho "hello world" > /dev/console
です。
Type=forking
シェルスクリプトに必要なに注意してください。
当社の完全な、最小限のサービスファイルは、ちょうどこれらの3つのセクションである([Unit]
、[Service]
、および[Install]
)。インストールするには、ファイルまたはそのファイルへのシンボリックリンクを/ etc / systemd / systemまたは/ usr / lib / systemd / systemのいずれかに配置し、以下を実行します。
systemctl --system enable helloworld
印刷されるはずln -s ...
です。これはサービスを実行せず、上記で説明したようにブート時に実行するように設定するだけです。
これで簡単です。 man systemd.unit
そしてman systemd.service
より多くの詳細を持っています。