ack在cronjob中失败,但可以从命令行正常运行

时间:2019-04-20 20:36:40

标签: bash cron ack

我正在将ack用作bash脚本的一部分,以从mysqldump构建MP4文件列表。转储文件约为15mb。

这是我的台词:

ack -o "https??://cdn.host.com\S+?\.mp4" /home/me/.dump.sql > /home/me/.mp4-matches.txt

手动运行bash脚本时效果很好。我们在.mp4-matches.txt中得到它:

    https://cdn.host.com/url/t_Foo/Foo.mp4
    https://cdn.host.com/url/t_Bar/Bar.mp4

但是当单独运行与cronjob相同的命令时,它将生成一个空文件。

我不知道为什么它不能在cron中工作。

我尝试在crontab中摆弄PATH,SHELL等,以尝试确保环境与手动运行相同。没有任何改变。

为了确定,我尝试使用crontab中的所有硬路径来确认/usr/bin/ack。没什么不同。

我尝试使用bash -l启动脚本。没什么不同。

我在做什么错了?

编辑以获取更多信息:

  • 我正在运行Debian 7,但我也在Ubuntu 18.04上进行了测试,并且同样出现了同样的问题。

  • 服务器正在运行exim4,所有工作正常。在cron中,关于此行的任何内容都没有发送到MAILTO地址。

  • / var / log / syslog或/ var / log / messages中都没有有关cron错误的信息

  • 使用bash #!/bin/bash

  • crontab中的任何地方都没有百分号(%)。

  • Crontab看起来像这样:

    MAILTO=myemail@address.com
    BASH=/bin/bash
    SHELL=/bin/bash
    PATH=/usr/local/bin:/usr/bin:/bin
    
    27 9 * * * /usr/bin/ack -o "https??://cdn.host.com\S+?\.mp4" /home/me/.dump.sql > /home/me/.mp4-matches.txt
    
  • 是的,这是我的crontab,而不是root。

  • 没有读取任何.ackrc文件。它在我的系统上不存在。 find / -iname ".ackrc"什么也没返回。

  • 一个简单的表达式"https://cdn.host.com/url/t_Foo/Foo.mp4"仍在cron中返回一个空文件。

  • 单引号和双引号在cron中都会产生空文件。

  • STERR似乎也什么也没提供。运行/usr/bin/ack -o 'https://cdn.host.com/url/t_Foo/Foo.mp4' /home/me/.dump.sql > /home/me/.mp4-matches.txt 2> /home/me/.ackerror.txt返回的.mp4-matches.txt和.ackerror.txt文件均为0字节。

1 个答案:

答案 0 :(得分:1)

  1. 这应该有效:

    * * * * * ack -o "https??://cdn.host.com\S+?\.mp4" /home/me/.dump.sql </dev/null > /home/me/.mp4-matches.txt
    
  2. 另外,您可能还可以使用带有--nofilter选项的行