Сценарий запуска Centos Systemctl - плохой интерпретатор Ruby - PullRequest
0 голосов
/ 06 октября 2018

Я получаю следующую ошибку, когда 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, PATH и т. д., но я не очень понимаю этот мир :)

Я пробовал мой стартовый скрипт с обоими #! / usr / bin / bash и #! / bin / bash

Есть ли другие предложения?


ОБНОВЛЕНИЕ 1:

добавил строку в мой скрипт, чтобы распечатать 'какой ruby', что привело к следующей ошибке

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

вот сценарий systemctl

[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

При запуске версии от имени root, 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

1 Ответ

0 голосов
/ 09 октября 2018

Один из ваших сценариев - вероятно, /usr/local/bin/procodile, но потенциально что-то, что он вызывает - начинается с #!/usr/bin/ruby.

Однако ваш интерпретатор Ruby не установлен как /usr/bin/ruby, так что ломается.

Найдите ответственный скрипт и измените его первую строку на #!/usr/bin/env ruby, что будет соответствовать PATH для поиска интерпретатора для запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...