Linux Cron bash脚本-从未执行过find命令

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

请查看我的脚本以获取和解析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 &
/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
就不会返回任何内容。我可能的解决办法:

  • 确保我在特定时间打电话给
    find
    ,以获得5天的时间
  • 不要使用
    mtime
    ,而是从文件名解析时间戳(这似乎是 最简单、最安全的解决方案)
  • 找到一些方法来强制
    find
    命令运行ommit hours,并且只在计算时使用date(我实际上不知道该怎么做)

我知道怎么回事,
find
命令是罪魁祸首-
-mtime 5
选项确实会返回5天以前的文件。然而,它也注意时间,而不仅仅是日期。因此,只要5天前(包括一天中的一小时)还没有满,
find
就不会返回任何内容。我可能的解决办法:

  • 确保我在特定时间打电话给
    find
    ,以获得5天的时间
  • 不要使用
    mtime
    ,而是从文件名解析时间戳(这似乎是 最简单、最安全的解决方案)
  • 找到一些方法来强制
    find
    命令运行ommit hours,并且只在计算时使用date(我实际上不知道该怎么做)

您在
/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
命令。