• Home »
  • Errors »
  • Cron Bash Script Error: /usr/bin/env: ruby: No such file or directory

Cron Bash Script Error: /usr/bin/env: ruby: No such file or directory

I needed to create a bash shell script tonight that called another shell script with options that then would load a Ruby environment and execute certain commands within a Ruby project. I ran into numerous issues but most were silly things such as typos or other minor issues caused by myself. The one issue I had a little trouble figuring out because of the file that was causing the error related to cron not being able to run “/usr/bin/env: ruby”. My bash script worked perfectly from the Linux CLI shell however when attempting to run it I would always get the same error. Below I list details about the error, where I finally located what the error was, and how to resolve the error.

How The Bash Script  Run From Cron Error Was Discovered:

I was outputting the results of cron to a log file at first but I was unable to see any errors. The script would be called, log a couple basic commands I put in to make sure it was running, and then stop without a single error. There were also no errors showing up in the cron log file located at /var/log/cron. Finally I removed the “>> somefile.log” at the end of the cronjob to see if an error would display in the email for the user running the cronjob. Sure enough when reviewing the mail for that user the error below was displayed in the contents of each email sent from cron.

Bash Script Run From Cron Error Locating Ruby:

It turns out more output was being sent to the email for the user running cron versus how I had the output going to a log file. To check mail from the command line in Linux just su to that user and type mail as displayed below.

Check User Email From Linux CLI:

[root@sdev ~]$ su - web
[web@sdev ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/web": 2 messages 2 unread
>U 1 root@dev.somedomain Thu Dec 2 00:42 76/5850 "Cron /home/web/ruf-restart.sh >> /home/web/ruf-restart.log"

The above shows would display if you only had one email waiting for that user. To read that email from within the mail command line application just click enter. If there are numerous emails waiting you can continue clicking enter to read through the email. Anyhow when I read the email that was waiting the below errors displayed.

Cron Bash Script Errors In Cron Users Email Inbox:

Thu Dec 2 00:38:01 CST 2009
Starting Rufus Job Restart Cron
/usr/bin/env: ruby: No such file or directory
/usr/bin/env: ruby: No such file or directory
/usr/bin/env: ruby: No such file or directory
Ending Rufus Job Restart Cron
Thu Dec 2 00:38:11 CST 2009

The contents above display output from the “date” command, a echo message explaining the process, three attempts to restart rufus which makes ruby calls, a echo message explaining the process has ended, and the specific time the script ended also displayed using date. So now I had to figure out why the error below was displaying.

Error:/usr/bin/env: ruby: No such file or directory

The path lead from my shell script calling rufus.sh to rufus.sh calling config/jobs/control.rb to control.rb calling script/runner. At the top of script runner was “#!/usr/bin/env ruby” which I needed to change to “#!/usr/local/bin/ruby” to resolve the issue. Cron was unable to run “env ruby”. So again to resolve this error simply modify the runner file to look like the below.

Modify The Top Line Of “project-root/script/runner”:

require File.dirname(__FILE__) + '/../config/boot'
require 'commands/runner'

The bash script now runs from cron without any issue.

List Price: $39.99 USD
New From: $21.92 USD In Stock
Used from: $17.55 USD In Stock

The Ruby Programming Language (Paperback)

By (author): David Flanagan, Yukihiro Matsumoto

List Price: $39.99 USD
New From: $19.96 USD In Stock
Used from: $11.97 USD In Stock