当 systemctl 尝试运行我的启动脚本时,我收到以下错误
/usr/bin/startup/status_start.sh: /usr/local/bin/procodile: /usr/bin/ruby: bad interpreter: No such file or directory
这是我的开始脚本
#!/usr/bin/bash
cd /opt/staytus/staytus/
procodile start
现在我认为这与 bash shell 和 PATH 等有关,但我真的不了解那个世界:)
我已经尝试了我的启动脚本与#!/usr/bin/bash和#!/bin/bash一起
还有其他建议吗?
更新 1:
在我的脚本中添加了一行以打印出"哪个红宝石",导致以下错误
Oct 06 17:31:02 status.sh[11014]: which: no ruby in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
这导致我添加更多
echo "current path:" $PATH
PATH=/opt/staytus/.rbenv/shims/ruby:$PATH
echo "new path:" $PATH
但是尽管我进行了尝试,当 systemctl 运行启动时,我仍然会收到错误......
Oct 06 17:45:37 start.sh[2878]: current path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Oct 06 17:45:37 start.sh[2878]: new path: /opt/staytus/.rbenv/shims/ruby:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Oct 06 17:45:37 start.sh[2878]: /usr/bin/startup/start.sh: /usr/local/bin/procodile: /usr/bin/ruby: bad interpreter: No such file or directory
更新 2
这是系统CTL脚本
[Unit]
Description=Starts up procodile which runs staytus
[Service]
User=staytus
Type=simple
WorkingDirectory=/opt/staytus/staytus/
ExecStart=/usr/bin/startup/start.sh
ExecStop=/usr/bin/startup/stop.sh
# Restart=on-abort
[Install]
WantedBy=multi-user.target
当以根身份运行版本时,staytus
bash: /usr/bin/ruby: No such file or directory
Ruby 似乎安装在
which ruby
~/.rbenv/shims/ruby
更新 3:
好的,所以我决定通过另一个脚本将似乎缺少的路径流添加到我的脚本中,该脚本打印命令以通过 eval 命令设置环境
path.sh
#!/bin/sh
echo export PATH=/opt/staytus/bin/procodile:/opt/staytus/.rbenv/shims/ruby:/usr/lib64/ruby:/usr/share/ruby:/usr/bin/bash:$PATH
start.sh
#!/usr/bin/env bash
set -xv
whoami
echo "current path:" $PATH
cd /opt/staytus/staytus/
pwd
eval `/usr/bin/startup/path.sh`
echo "New path:" $PATH
procodile start
你的一个脚本 - 可能是/usr/local/bin/procodile
,但可能是它调用的东西 - 以#!/usr/bin/ruby
开头。
但是,您的 Ruby 解释器未安装为/usr/bin/ruby
,因此会中断。
找到负责的脚本,并将其第一行更改为#!/usr/bin/env ruby
,这将遵循 PATH 以查找要运行的解释器。