/ usr / bin / env: 'ruby': нет такого файла или каталога

Когда crontab пытается выполнить скрипт:

@reboot sh /home/username/unicorn_start.sh > /home/username/unicorn_start.out 2>&1

Он создает мне файл журнала со следующим содержимым: /usr/bin/env: ‘ruby’: No such file or directory.

Это то, что у меня есть в unicorn_start.sh:

#!/bin/bash PATH="$PATH:/usr/local/rvm/gems/ruby-1.9.2-p180/bin" /etc/init.d/unicorn_myapp start

Если я выполняю unicorn_start.sh: или unicorn_start.sh вручную, все работает отлично , Насколько я понимаю, мне нужно добавить дополнительный путь к переменной $ PATH. Каким образом это делается? Спасибо!

unicorn_start.sh

unicorn_init.sh:

#!/bin/sh ### BEGIN INIT INFO # Provides: unicorn # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Manage unicorn server # Description: Start, stop, restart unicorn server for a specific application. ### END INIT INFO set -e # Feel free to change any of the following variables for your app: TIMEOUT=${TIMEOUT-60} APP_ROOT=/home/username/appname PID=$APP_ROOT/tmp/pids/unicorn.pid CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" AS_USER=root set -u OLD_PIN="$PID.oldbin" sig () { test -s "$PID" && kill -$1 `cat $PID` } oldsig () { test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` } run () { if [ "$(id -un)" = "$AS_USER" ]; then eval $1 else su -c "$1" - $AS_USER fi } case "$1" in start) sig 0 && echo >&2 "Already running" && exit 0 run "$CMD" ;; stop) sig QUIT && exit 0 echo >&2 "Not running" ;; force-stop) sig TERM && exit 0 echo >&2 "Not running" ;; restart|reload) sig HUP && echo reloaded OK && exit 0 echo >&2 "Couldn't reload, starting '$CMD' instead" run "$CMD" ;; upgrade) if sig USR2 && sleep 2 && sig 0 && oldsig QUIT then n=$TIMEOUT while test -s $OLD_PIN && test $n -ge 0 do printf '.' && sleep 1 && n=$(( $n - 1 )) done echo if test $n -lt 0 && test -s $OLD_PIN then echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds" exit 1 fi exit 0 fi echo >&2 "Couldn't upgrade, starting '$CMD' instead" run "$CMD" ;; reopen-logs) sig USR1 ;; *) echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>" exit 1 ;; esac
0
задан 27 July 2017 в 17:08

4 ответа

Если вы используете какую команду, вы можете увидеть, где находится ваш исполняемый файл ruby, например

which ruby /usr/bin/ruby

Вы можете добавить этот путь к переменной $ PATH прямо к crontab (не что лучшая практика может диктовать, но работала для меня в прошлом)

0
ответ дан 18 July 2018 в 09:34

Используемый по умолчанию PATH crontab использует «only» /usr/bin:/bin, однако вы можете его отрегулировать.

Вместо того, чтобы писать вещи в этом скрипте, попробуйте добавить его непосредственно в команду crontab:

@reboot PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/rvm/gems/ruby-1.9.2-p180/bin"; /etc/init.d/unicorn_myapp start > /home/username/unicorn_start.out 2>&1

Вы также можете добавить переменную пути выше каждого cronjob, чтобы она применима к каждой заданной вами задаче:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/rvm/gems/ruby-1.9.2-p180/bin" # # * * * * * myjob.sh @reboot /home/username/unicorn_start.sh > /home/username/unicorn_start.out 2>&1
0
ответ дан 18 July 2018 в 09:34

Если вы используете какую команду, вы можете увидеть, где находится ваш исполняемый файл ruby, например

which ruby /usr/bin/ruby

Вы можете добавить этот путь к переменной $ PATH прямо к crontab (не что лучшая практика может диктовать, но работала для меня в прошлом)

0
ответ дан 24 July 2018 в 19:22

Используемый по умолчанию PATH crontab использует «only» /usr/bin:/bin, однако вы можете его отрегулировать.

Вместо того, чтобы писать вещи в этом скрипте, попробуйте добавить его непосредственно в команду crontab:

@reboot PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/rvm/gems/ruby-1.9.2-p180/bin"; /etc/init.d/unicorn_myapp start > /home/username/unicorn_start.out 2>&1

Вы также можете добавить переменную пути выше каждого cronjob, чтобы она применима к каждой заданной вами задаче:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/rvm/gems/ruby-1.9.2-p180/bin" # # * * * * * myjob.sh @reboot /home/username/unicorn_start.sh > /home/username/unicorn_start.out 2>&1
0
ответ дан 24 July 2018 в 19:22
  • 1
    Тем не менее, это дает мне ту же ошибку: /usr/bin/env: ‘ruby’: No such file or directory – Alex Zakruzhetskyi 27 July 2017 в 15:27
  • 2
    Какое решение вы попробовали? – Ziazis 27 July 2017 в 15:31
  • 3
    Первый, который вы написали. EDIT: Пробовал второе решение, но результат не изменился. – Alex Zakruzhetskyi 27 July 2017 в 15:32
  • 4
    Звучит скорее как проблема в вашем ruby-скрипте, а затем проблема cronjob. Вы можете попробовать то же самое с помощью простого «echo $ PATH». вместо вашего скрипта и посмотреть, что представляет собой переменная PATH, или создать сценарий ruby ​​world ruby ​​и попытаться подключиться к файлу. – Ziazis 27 July 2017 в 15:47
  • 5
    Выход echo $PATH: /root/bin:/root/.local/bin:/root/.rbenv/plugins/ruby-build/bin:/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/rvm/gems/ruby-1.9.2-p180/bin:/usr/local/rvm/gems/ruby-1.9.2-p180@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-p180/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/rvm/gems/ruby-1.9.2-p180/bin:/snap/bin:/usr/local/rvm/bin – Alex Zakruzhetskyi 27 July 2017 в 15:54

Другие вопросы по тегам:

Похожие вопросы: