【问题标题】:why cygwin cron cannot find a file when cygwin ls can?为什么 cygwin ls 可以时 cygwin cron 找不到文件?
【发布时间】:2010-06-04 20:44:59
【问题描述】:

我使用 cygrunsrv 和 vixie 的 cron for cygwin 安排了一个 cron 作业。该作业是一个 shell 脚本,它将文件从一个目录复制到另一个目录并重命名它们。

脚本位于 /home/martin/my/script/copy_files.sh 中。并且路径的权限是:

drwxrwxrwt+ 1 martin root         0 2010-06-02 17:36 home
drwxr-xr-x+ 1 martin Domain Users 0 2010-06-03 16:19 martin
drwxrwxrwt+ 1 martin Domain Users 0 2010-06-02 16:47 my
drwxrwxrwt+ 1 martin Domain Users 0 2010-06-04 16:31 script
-rwxr-xr-x  1 martin Domain Users 439 2010-06-02 18:10 copy_files.sh

当我ls -l时,源文件为:

-rwxrw-rw-  1 martin Domain Users 13856 2010-06-04 10:05 .bash_history

但是当作业运行时,cp命令失败,原因是

cp: /home/martin/.bash_history: The system cannot find the path specified.

那么有什么问题吗?我该如何解决?

谢谢。

【问题讨论】:

    标签: shell cygwin crontab


    【解决方案1】:

    我已经有几次没有看过 cygwin,所以我在这方面的详细信息会很少。

    您的问题是目录树。在复制之前,您需要将 cwd(使用 cd)设置为 /home/martin。诀窍是知道 /home 的位置,相对于 cron 登录的位置。坦率地说,我不记得了,但我记得我在 docset 中找不到它。

    假设时间是 15:28。进入 crontab -e 添加这个:

    30 * * * *  /usr/bin/echo "current dir= $(pwd)  $PATH" 2&>1 > ./19191919.log
    

    等到 15:31,进入 crontab -e 并删除该条目。我们不再想要它了

    find / -type f -name 19191919.log  -exec /usr/bin/cat {} \;
    

    这将告诉您您需要了解的内容。关于 PATH 和登录目录的位置。我对 vixie 的体验是它不是 /etc/passwd 中的主目录

    有一些 .conf 文件覆盖了 /etc/passwd。

    这是很久以前的事了,如果情况有所不同,请见谅。

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 2012-06-17
      • 2010-10-23
      相关资源
      最近更新 更多