почему Cygwin Cron не может найти файл, когда Cygwin Ls может? - PullRequest
0 голосов
/ 05 июня 2010

Я получил задание cron, используя cygrunsrv и cron Викси для cygwin. Задание представляет собой сценарий оболочки, который копирует файлы из одного каталога в другой и переименовывает их.

Сценарий находится в /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.

Так что не так? Как я могу это исправить?

Спасибо.

1 Ответ

0 голосов
/ 08 июня 2010

Я не смотрел на 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 {} \;

Это скажет вам, что вам нужно знать. о ПУТИ и о том, где находится каталог входа в систему. Мой опыт работы с vixie заключался в том, что это НЕ БЫЛ домашний каталог в / etc / passwd

Был какой-то файл .conf, который переопределил /etc/passwd.

Это было давно, извините, если что-то изменится.

...