无法在 Python 脚本中执行 Ruby 脚本

Unable to execute Ruby script in a Python script

我在使用 Python 代码执行 Ruby 脚本时遇到问题。

我的服务器有一个 cron 作业,它应该执行一个 Python 脚本和一个 Ruby 脚本。但是,Ruby 脚本必须在 Python 脚本之后执行,所以我决定添加一行:

os.system("ruby /home/username/helloworld.rb") 

在 Python 脚本的末尾。

它可以运行,但我在日志文件中收到此错误:

/bin/sh 1: ruby not found

我不确定为什么会这样;我已经尝试在 Python 控制台中调用完全相同的函数,并在 运行 中手动调用 Python 脚本,两者都运行良好。换句话说,当脚本由 cron 触发时,这行代码 ONLY 不起作用。

我的 crontab/Python 脚本中是否还需要添加其他内容?

Cron 仅将非常有限的环境变量传递给您的作业。根据 CRONTAB(5) Man Page:

  • SHELL 设置为 /bin/sh
  • PATH 设置为 /usr/bin:/bin
  • LOGNAMEHOME 是从 crontab 的 /etc/passwd 行设置的 所有者。

HOME, PATH and SHELL may be overridden by settings in the crontab; LOGNAME may not.

因此,如果您的 ruby 可执行文件不在 /usr/bin/bin 中,默认情况下 cron 无法找到它。

您可以在 crontab 中指定 PATH 以包括您的 ruby 可执行文件。

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

17 * * * * python my_ruby_calling_script.py