/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
Share:
11,446

Related videos on Youtube

Alex Zakruzhetskyi
Author by

Alex Zakruzhetskyi

I've started learning Ruby on Rails.

Updated on September 18, 2022

Comments

  • Alex Zakruzhetskyi
    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
      Melebius almost 7 years
      Do you want to start a daemon (assuming from /etc/init.d/)? You should start it as a service in such a case, not using cron. askubuntu.com/questions/19320/how-to-enable-or-disable-servi‌​ces
    • Alex Zakruzhetskyi
      Alex Zakruzhetskyi almost 7 years
      When 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
      Melebius almost 7 years
      You 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
      Alex Zakruzhetskyi almost 7 years
      unicorn_myapp is a symlink to unicorn_init.sh that is located in the rails project in app/config If you need the content of unicorn_init.sh, I'll add it to the post.
  • Alex Zakruzhetskyi
    Alex Zakruzhetskyi almost 7 years
    Still, it gives me the same error: /usr/bin/env: ‘ruby’: No such file or directory
  • Ziazis
    Ziazis almost 7 years
    Which solution did you try?
  • Alex Zakruzhetskyi
    Alex Zakruzhetskyi almost 7 years
    The first one you wrote. EDIT: Tried the second solution, but the result didn't change.
  • Ziazis
    Ziazis almost 7 years
    Sounds 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
    Alex Zakruzhetskyi almost 7 years
    The output of echo $PATH: /root/bin:/root/.local/bin:/root/.rbenv/plugins/ruby-build/b‌​in:/root/.rbenv/shim‌​s:/root/.rbenv/bin:/‌​usr/local/rvm/gems/r‌​uby-1.9.2-p180/bin:/‌​usr/local/rvm/gems/r‌​uby-1.9.2-p180@globa‌​l/bin:/usr/local/rvm‌​/rubies/ruby-1.9.2-p‌​180/bin:/usr/local/s‌​bin:/usr/local/bin:/‌​usr/sbin:/usr/bin:/s‌​bin:/bin:/usr/games:‌​/usr/local/games:/us‌​r/local/rvm/gems/rub‌​y-1.9.2-p180/bin:/sn‌​ap/bin:/usr/local/rv‌​m/bin
  • Ziazis
    Ziazis almost 7 years
    I 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
    Alex Zakruzhetskyi almost 7 years
    It 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
    Ziazis almost 7 years