我正在将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字节。
答案 0 :(得分:1)
这应该有效:
* * * * * ack -o "https??://cdn.host.com\S+?\.mp4" /home/me/.dump.sql </dev/null > /home/me/.mp4-matches.txt
另外,您可能还可以使用带有--nofilter
选项的行