【问题标题】:linux find with exec with > not working when inside cronlinux用exec查找>在cron内部时不起作用
【发布时间】:2013-09-11 14:28:28
【问题描述】:

我创建了一个简单的 bash 脚本来:查找一些文件并执行一个命令。 该命令必须输出一个我需要为每次执行存储的内容。

所以,我有类似的东西:

find /some/folder/ -name "*txt" -exec /bin/sh -c "/path/command -x -f {} > {}.pdf" \;

所以,我会在 /some/folder/ 中找到 txt 文件,对于每个文件,我将执行 /path/command 并将文件路径传递给参数 -f /path/command 并且会得到二进制文件,所以我只需要获取输出并添加后缀 .pdf

问题是,当我手动执行此操作时,一切正常。 但是当我把它放在一个 cron 中时,就会发生这种情况:

  • 如果存在 /some/folder/sample.txt 我得到了一个 /some/folder/sample.txt.pdf(所以,找到> 似乎工作正常)但似乎由 /path/command 执行但没有 -f /some/folder/sample.txt 参数。
  • /path/command 似乎没有得到 -f /some/folder/sample.txt 并在 created /some/folder/sample.txt 中输出警告消息.pdf 表示需要获取一个 -f 参数。

再次注意,如果我通过命令行(而不是通过 cron)执行此操作,一切正常。

我在这里做错什么了吗?

感谢支持。

【问题讨论】:

  • 您可以尝试将/path/command 替换为echo,以便.pdf 文件包含它尝试执行的完整命令。这可能会帮助您找出问题所在。
  • cron 的情况下,pdf 有什么?我想知道在这种情况下,sh 命令上的双引号是否受到尊重。
  • 同样的问题,更简单的情况 - find /var/tmp/sth -iname *.pdf 在 shell 中有效,在 cron 中无效。 /usr/bin/find 没有任何改变

标签: bash crontab


【解决方案1】:

你应该使用绝对pthes。

'/usr/bin/find' 代替 'find'

要查看问题所在,请以这种方式调用命令行

env -i  mycommands ....

这将剥离您的会话环境,并在非常类似于 cron 环境的环境中运行命令。

然后更正您在 crontab 中的输入。

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多