在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

存在路径问题(并且您的描述普遍不一致)。

在您的描述中,脚本/home/bsc/start.sh以开头,./geth_linux但应以 shebang 行开头。

错误消息说line 1: geth: command not found。它既没有说geth_linux也没有./geth_linux。所以显然存在一些混淆。

您应该仅使用以下命令调用:

  • 完整路径例如/home/bsc/start.sh(这是最好的解决方案)
  • 没有路径 iegeth_linux而不是./geth_linux;这只适用于命令which输出绝对文件路径的命令。

答案2

服务文件看起来工作正常。我将您的脚本文件高度移动到以下目录:

mv ./YOUR_CURRENT_PATH /usr/local/bin/

然后 geth_linux linux 就可以从任何地方访问。

答案3

好吧,我明白了。问题是 bsc.service 必须重命名为 geth.service。进行此更改后一切正常

相关内容