web-dev-qa-db-ja.com

Systemdエラー:実行可能パスが絶対パスではありません

私は以下のsystemdのコードを持っています。

[Unit]
Description=start RCC logger server process
Requires=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
After=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service

[Service]
ExecStart= exec /var/RCC/RCClogger.sh
Restart=no

[Install]
WantedBy=multi-user.target

実行しようとすると、以下のエラーが発生します。

Mar 23 04:45:52 localhost.localdomain systemd[1]: 
[/etc/systemd/system/rcc_logger.service:7] Executable path is not absolute, 
ignoring: exec /v...ogger.sh
Mar 23 04:45:52 localhost.localdomain systemd[1]: rcc_logger.service lacks 
both ExecStart= and ExecStop= setting. Refusing.

Execコマンドの絶対パスがないためですが、execはバイナリとして使用できないため、絶対パスを使用できません。このExecStartを実行する方法は?

4
Prashanth CM

Systemdサービスユニット構成ではexecを使用できません。
execは組み込みのシェルであり、ファイルシステムから直接呼び出すことはできません(ファイルシステムに存在しません)-type execおよびwhereis execが表示されますあなたのその。
書かれているシェルを使用します。

たとえば、bashスクリプトの場合、次のようにスクリプトを実行できます。

bash /var/RCC/RCClogger.sh

現在、bashは実行可能ファイルであり、絶対パスは/bin/bashです。 ExecStartは次のようになります。

ExecStart=/bin/bash /var/RCC/RCClogger.sh

別の方法は、スクリプトの先頭に Shebang を追加することです。

#!/bin/bash
... script code ...

これは、指定されたインタープリター(この場合は/bin/bash)を使用してファイルを実行するようにオペレーティングシステムに指示します。

その後、スクリプトを実行可能にします。

chmod +x /var/RCC/RCClogger.sh

そして、それを直接ExecStartとして使用します。

ExecStart=/var/RCC/RCClogger.sh
7
Fanatique

"EXecStart ="には、サービスを開始するための絶対パスが必要です。 .shファイルへの完全なパスを取得し、ExecStartステートメントに追加します。

再び「マンページ」はあなたに詳細な情報を与えます。

0
Ajay CJ