【问题标题】:crontab not executing perl scriptcrontab 不执行 perl 脚本
【发布时间】:2020-05-30 15:01:42
【问题描述】:

我在安排 crontab 任务时遇到问题;我已经用谷歌搜索并阅读了大量页面,但无法理解给出的解决方案是否特定于示例并且它们似乎无法解决我的问题。

我正在尝试运行一个名为 perl_speedtest.pl 的基本 perl 脚本,该脚本位于我的树莓派上的 /home/pi/Documents/Projects 目录中。当我通过命令手动运行脚本时:perl perl_speedtest.pl 从上述目录中运行完美。

我已通过在终端中使用“crontab -e”命令将任务安排为每 20 分钟运行一次,并使用以下 crontab 作业:

*/20 * * * * perl /home/pi/Documents/Projects/perl_speedtest.pl

由于某种原因,这不执行.. 任何想法?如果需要,很高兴分享更多细节。

【问题讨论】:

  • 您应该在 crontab 文件中定义email address,您将收到包含错误/尝试运行脚本结果的电子邮件。 man crontab它会帮助您解决问题。
  • 请尝试指定 perl 的完整路径,例如 /usr/bin/perl。 crontab 环境与你自己的不同,perl 的路径可能不包含在 PATH 变量中。

标签: perl path cron raspberry-pi environment-variables


【解决方案1】:

正如上述评论者指出的那样,在cron 中正确设置您的环境。否则,cron 使用非常小的环境(包括PATHPERL5LIB 等)。您的 crontab 应该看起来像这样,具体取决于您在交互式 shell 中使用它时的实际环境:

HOME=/home/pi
SHELL=/bin/bash
MAIL=/usr/bin/mail

06 */1 * * * source ~/.bashrc &> /dev/null ; perl /home/pi/Documents/Projects/perl_speedtest.pl

# or this (find the perl path by executing "which perl"):

06 */1 * * * /usr/bin/perl /home/pi/Documents/Projects/perl_speedtest.pl

【讨论】:

  • .bashrc 用于 interactive shell,所以第一个版本不好。 bash 使用的登录脚本实际上是.profile.bash_profile 中的第一个。固定:06 */1 * * * exec /bin/bash -lc '"$@"' x perl /home/pi/Documents/Projects/perl_speedtest.pl
  • */1 那是做什么的?
  • @Red 它是一个“步长值”(参见man 5 crontab),但由于它是一个“1”,它与* 相同
猜你喜欢
  • 2020-03-16
  • 2013-04-19
  • 2017-09-07
  • 2020-10-19
  • 2011-10-14
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多