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

혼란스러워요.

우분투 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

답변2

서비스 파일이 제대로 작동하는 것 같습니다. 스크립트 파일 높이를 다음 디렉터리로 이동하겠습니다.

mv ./YOUR_CURRENT_PATH /usr/local/bin/

그러면 어디에서나 geth_linux Linux에 액세스할 수 있습니다.

답변3

알았어, 알겠어. 문제는 bsc.service의 이름을 geth.service로 바꿔야 한다는 것입니다. 이렇게 변경한 후에는 모든 것이 잘 작동합니다.

관련 정보