Linux Cron bash脚本-从未执行过find命令
请查看我的脚本以获取和解析xmltv数据:Linux Cron bash脚本-从未执行过find命令,linux,bash,cron,Linux,Bash,Cron,请查看我的脚本以获取和解析xmltv数据: #! /bin/bash /bin/rm -f /home/hts/webgrab/multiple/out/*.xml /home/hts/webgrab/multiple/1/run.sh & /home/hts/webgrab/multiple/2/run.sh & /home/hts/webgrab/multiple/3/run.sh & /home/hts/webgrab/multiple/4/run.sh &am
#! /bin/bash
/bin/rm -f /home/hts/webgrab/multiple/out/*.xml
/home/hts/webgrab/multiple/1/run.sh &
/home/hts/webgrab/multiple/2/run.sh &
/home/hts/webgrab/multiple/3/run.sh &
/home/hts/webgrab/multiple/4/run.sh &
/home/hts/webgrab/multiple/5/run.sh &
/home/hts/webgrab/multiple/6/run.sh &
/home/hts/webgrab/multiple/7/run.sh &
/home/hts/webgrab/multiple/8/run.sh &
/home/hts/webgrab/multiple/9/run.sh &
/home/hts/webgrab/multiple/10/run.sh &
/home/hts/webgrab/multiple/11/run.sh &
/home/hts/webgrab/multiple/12/run.sh &
/home/hts/webgrab/multiple/13/run.sh &
/home/hts/webgrab/multiple/14/run.sh &
/home/hts/webgrab/multiple/15/run.sh &
/home/hts/webgrab/multiple/16/run.sh &
/home/hts/webgrab/multiple/17/run.sh &
/home/hts/webgrab/multiple/18/run.sh &
/home/hts/webgrab/multiple/19/run.sh &
/home/hts/webgrab/multiple/20/run.sh &
/home/hts/webgrab/multiple/21/run.sh &
wait
/usr/bin/tv_cat /home/hts/webgrab/multiple/out/*.* > /home/hts/webgrab/multiple/out/guide.xml
#copy result with timestamp
/bin/cp -rf /home/hts/webgrab/multiple/out/guide.xml "/var/www/guide/guide-$(date +"%Y%m%d").xml"
sleep 10
#find and rename file 5 day old
/usr/bin/find /var/www/guide -type f -name 'guide*' -mtime 5 -execdir /bin/mv {} /var/www/guide/pl.xml ';' 2> /home/hts/epg.log
如您所见,执行多个webgrab
程序实例,脚本等待所有实例完成。然后,将结果合并到单个xmltv文件(guide.xml)中,然后将guide.xml复制到带有时间戳的/var/www/guide
目录中。最后一步:
/usr/bin/find/var/www/guide-type f-name“guide*”-mtime 5-execdir/bin/mv{}/var/www/guide/pl.xml“;”2> /home/hts/epg.log
查找5天前的旧文件-如果存在(-mtime 5
)并将其重命名(使用覆盖旧文件)为pl.xml
问题:看起来最后一个命令从未执行过。作为我的cron作业的结果,我只得到了新的时间戳文件,但是重命名的pl.xml
总是丢失。但如果我从命令行运行上面的find
命令,旧文件将正确重命名为pl.xml
你知道这里怎么了吗?包括完整的命令路径,以确保它们将与cron一起运行。但它并没有帮助,查找和重命名命令不起作用。旧文件确实存在,因为它是5天前创建的,但由于某些原因,重命名命令在此脚本中无法从cron中运行。我知道有什么问题,
find
命令是罪魁祸首--mtime 5
选项确实返回了5天以前的文件。然而,它也注意时间,而不仅仅是日期。因此,只要5天前(包括一天中的一小时)还没有满,find
就不会返回任何内容。我可能的解决办法:
- 确保我在特定时间打电话给
,以获得5天的时间find
- 不要使用
,而是从文件名解析时间戳(这似乎是 最简单、最安全的解决方案)mtime
- 找到一些方法来强制
命令运行ommit hours,并且只在计算时使用date(我实际上不知道该怎么做)find
find
命令是罪魁祸首--mtime 5
选项确实会返回5天以前的文件。然而,它也注意时间,而不仅仅是日期。因此,只要5天前(包括一天中的一小时)还没有满,find
就不会返回任何内容。我可能的解决办法:
- 确保我在特定时间打电话给
,以获得5天的时间find
- 不要使用
,而是从文件名解析时间戳(这似乎是 最简单、最安全的解决方案)mtime
- 找到一些方法来强制
命令运行ommit hours,并且只在计算时使用date(我实际上不知道该怎么做)find
/home/hts/epg.log
中看到了什么?您的cron
用户在那里有写权限吗?请在脚本顶部尝试set-x
。奇怪的是,如果我将find
作为脚本中执行的第一个命令,它似乎正在工作。但我仍然不明白为什么最后一个不起作用,仍然不起作用。有时有效,有时无效。我补充说,作为单cron作业,结果是相同的。有什么想法吗?你的日志是怎么说的,正如tripleee和abihaora问的那样?我还将-v
选项添加到mv
,不仅将stderr重定向到epg.log,还将stdout重定向到epg.log。另外,您的-mitime
是可疑的。也许没有以指南开头的文件,它在120多小时前就被修改过了?为了安全起见,在只显示所有指南文件修改时间的命令之前运行find
命令。您在/home/hts/epg.log
中看到了什么?您的cron
用户在那里有写权限吗?请在脚本顶部尝试set-x
。奇怪的是,如果我将find
作为脚本中执行的第一个命令,它似乎正在工作。但我仍然不明白为什么最后一个不起作用,仍然不起作用。有时有效,有时无效。我补充说,作为单cron作业,结果是相同的。有什么想法吗?你的日志是怎么说的,正如tripleee和abihaora问的那样?我还将-v
选项添加到mv
,不仅将stderr重定向到epg.log,还将stdout重定向到epg.log。另外,您的-mitime
是可疑的。也许没有以指南开头的文件,它在120多小时前就被修改过了?为了安全起见,在只显示所有指南文件修改时间的命令之前运行find
命令。