/usr/bin/env: ‘ruby’: No such file or directory
11,446
The default PATH crontab is using is "only" /usr/bin:/bin
, however you can adjust it.
Instead of writing the things in that script try adding it directly into the crontab command:
@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
You can also add the path variable above every cronjob so it's applicable to every task you put in there:
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
Related videos on Youtube
Comments
-
Alex Zakruzhetskyi over 1 year
When crontab tries to execute the script:
@reboot sh /home/username/unicorn_start.sh > /home/username/unicorn_start.out 2>&1
It creates me a log file with the following content:
/usr/bin/env: ‘ruby’: No such file or directory
.This is what I have in unicorn_start.sh:
#!/bin/bash PATH="$PATH:/usr/local/rvm/gems/ruby-1.9.2-p180/bin" /etc/init.d/unicorn_myapp start
If I execute unicorn_myapp or unicorn_start.sh manually, everything works fine. As I understand, I need to add an additional path to $PATH variable. What is the way of doing it? Thanks ahead.
EDIT:
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
-
Melebius almost 7 yearsDo you want to start a daemon (assuming from
/etc/init.d/
)? You should start it as a service in such a case, not usingcron
. askubuntu.com/questions/19320/how-to-enable-or-disable-services -
Alex Zakruzhetskyi almost 7 yearsWhen I start it like service:
sudo service unicorn_appname start
, it gives me an error:/etc/init.d/unicorn_appname: 1: eval: bundle: not found
-
Melebius almost 7 yearsYou should show us the code in
/etc/init.d/unicorn_myapp
. The code you’ve posted till now does not contain any call to/usr/bin/env
. -
Alex Zakruzhetskyi almost 7 years
unicorn_myapp
is a symlink tounicorn_init.sh
that is located in the rails project inapp/config
If you need the content ofunicorn_init.sh
, I'll add it to the post.
-
-
Alex Zakruzhetskyi almost 7 yearsStill, it gives me the same error:
/usr/bin/env: ‘ruby’: No such file or directory
-
Ziazis almost 7 yearsWhich solution did you try?
-
Alex Zakruzhetskyi almost 7 yearsThe first one you wrote. EDIT: Tried the second solution, but the result didn't change.
-
Ziazis almost 7 yearsSounds more like an issue in your ruby script then cronjob issue. You can try the same with just a simple "echo $PATH" instead of your script and see what the PATH variable consists of or create a hello world ruby script and try piping that ouput into a file.
-
Alex Zakruzhetskyi almost 7 yearsThe output of
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
-
Ziazis almost 7 yearsI ment putting it into your crontab instead of your unicorn script. So e.g.
@reboot echo $PATH > /tmp/crontab.path
reboot and see what you actually have as a PATH during the reboot. If you used the second one it should be the path that was set. -
Alex Zakruzhetskyi almost 7 yearsIt gives me:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/rvm/gems/ruby-1.9.2-p180/bin
-
Ziazis almost 7 yearsLet us continue this discussion in chat.