私は以下の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を実行する方法は?
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
"EXecStart ="には、サービスを開始するための絶対パスが必要です。 .shファイルへの完全なパスを取得し、ExecStartステートメントに追加します。
再び「マンページ」はあなたに詳細な情報を与えます。