cron 启动但不执行脚本

cron 启动但不执行脚本

我设置了一个 crontabcrontab -e并检查它是否已保存crontab -l

*/10 6-8 * 1-11 1 /home/asarluhi/Documents/Scripts/monday.sh

的内容monday.sh为:

#!/bin/bash

ruby ~/Documents/Scripts/monday_task.rb >> ~/Documents/Scripts/monday

monday_task.rb是一个 ruby​​ 脚本,用于从网络上抓取一些数据,太长了,无法在这里报告,但其中没有错误。monday是一个简单的空文本文件,
从 shell 启动时,脚本运行正常。

我查看var/log/syslog并发现以下条目:

Nov  7 07:55:01 SATELLITE-L50-A-161 CRON[6984]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Nov  7 08:00:01 SATELLITE-L50-A-161 CRON[7032]: pam_ecryptfs: Skipping automatic eCryptfs mount
Nov  7 08:00:01 SATELLITE-L50-A-161 CRON[7033]: (asarluhi) CMD (/home/asarluhi/Documents/Scripts/monday.sh)
Nov  7 08:00:01 SATELLITE-L50-A-161 CRON[7031]: (asarluhi) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Nov  7 08:00:01 SATELLITE-L50-A-161 CRON[7038]: pam_ecryptfs: Skipping automatic eCryptfs unmount
Nov  7 08:00:43 SATELLITE-L50-A-161 anacron[6485]: Job `cron.daily' terminated
Nov  7 08:00:43 SATELLITE-L50-A-161 anacron[6485]: Normal exit (1 job run)
Nov  7 08:05:01 SATELLITE-L50-A-161 CRON[7112]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Nov  7 08:10:01 SATELLITE-L50-A-161 CRON[7141]: pam_ecryptfs: Skipping automatic eCryptfs mount
Nov  7 08:10:01 SATELLITE-L50-A-161 CRON[7142]: (asarluhi) CMD (/home/asarluhi/Documents/Scripts/monday.sh)
Nov  7 08:10:01 SATELLITE-L50-A-161 CRON[7140]: (asarluhi) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Nov  7 08:10:01 SATELLITE-L50-A-161 CRON[7147]: pam_ecryptfs: Skipping automatic eCryptfs unmount
Nov  7 08:15:01 SATELLITE-L50-A-161 CRON[7206]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Nov  7 08:17:01 SATELLITE-L50-A-161 CRON[7221]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
...

您会发现,cron 任务在上午 8:00 启动,而不是 crontable 中的上午 6:00。
脚本已启动,但未写入任何内容。~/Documents/Scripts/monday
我在Cron 不运行脚本之前 askubuntu 的一个问题是 STDERR 应该以系统邮件结束,但是在 中没有以我的用户名命名的目录/var/mail/,所以我什么也没找到。

答案1

看起来可执行文件ruby不在cron的路径中,因此您需要使用可执行文件的完整路径。

更改您的monday.sh脚本:

#!/bin/bash
ruby ~/Documents/Scripts/monday_task.rb >> ~/Documents/Scripts/monday

到:

#!/bin/bash
/home/asarluhi/.rvm/rubies/ruby-2.3.1/bin/ruby /home/asarluhi/Documents/Scripts/monday_task.rb >> /home/asarluhi/Documents/Scripts/monday

正如您所syslog演示的,monday.sh脚本正在按时运行,因此绝对路径名是唯一的答案。根据 OP 评论,ruby还必须以绝对路径名作为前缀。

相关内容