systemdでbashスクリプトを実行する

systemdでbashスクリプトを実行する

バイナリ用のフラグであるこのスクリプトを実行するサービスを開始しようとしています。

スクリプトは次のとおりです。

./geth_linux --config ./config.toml --datadir ./mainnet --cache 100000 \
             --rpc.allow-unprotected-txs --txlookuplimit 0 --http --ws \
             --maxpeers 100 --syncmode=snap --snapshot=false --diffsync

バイナリディレクトリ/home/bscの端末でこのスクリプトを実行すると、必要な方法で実行されます。

サービスを開始すると、次のエラーが発生します。

(code=exited, status=203/EXEC)

これは私の.serviceファイルです。

[Unit]
Description=BSC Full Node
[Service]
User=bsc
Type=simple
WorkingDirectory=/home/bsc
ExecStart=/home/bsc/start.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target

スクリプトを実行可能にしました。

chmod +x /home/bsc/start.sh

私も以下を実行しました。

chown +R bsc.bsc /home/bsc/*

また、スクリプトの最初の行ExecStart=/bin/bash /home/bsc/start.sh を実行して追加してみましたが、やはり失敗しました。#!/bin/bash

混乱しています。

Ubuntu 20.04.3 LTS

システムエラーログ

Nov 24 04:25:14 rezonautik systemd[1]: Started BSC Full Node.
Nov 24 04:25:14 rezonautik bash[26939]: /home/bsc/start.sh: line 1: geth: command not found
Nov 24 04:25:14 rezonautik systemd[1]: bsc.service: Main process exited, code=exited, status=127/n/a
Nov 24 04:25:14 rezonautik systemd[1]: bsc.service: Failed with result 'exit-code'.
Nov 24 04:25:19 rezonautik systemd[1]: bsc.service: Scheduled restart job, restart counter is at 1.
Nov 24 04:25:19 rezonautik systemd[1]: Stopped BSC Full Node.
Nov 24 04:25:19 rezonautik systemd[1]: Started BSC Full Node.
Nov 24 04:25:19 rezonautik bash[26981]: /home/bsc/start.sh: line 1: geth: command not found
Nov 24 04:25:19 rezonautik systemd[1]: bsc.service: Main process exited, code=exited, status=127/n/a

ベストアンサー1

パスに問題があります(説明は通常一貫していません)。

説明では、スクリプトはshebang行で始まる必要があります/home/bsc/start.sh./geth_linux

エラーメッセージが言われましたline 1: geth: command not found。それはgeth_linux両方ではないと言います./geth_linux。だから明らかに少し混乱があります。

次の場合にのみ電話してください。

  • フルパス/home/bsc/start.sh(例:これが最善の解決策です)
  • パスなし、geth_linuxつまり絶対ファイルパスを出力するコマンド./geth_linuxでのみ機能します。which

おすすめ記事