Редактировать: Обновлено, чтобы отразить некоторые ответы
У меня на домашнем компьютере есть скрипт test.sh:
Примечание: $ USER = john
#!/bin/bash
/usr/bin/scp -q john@mysite.com:/home/$USER/tmp/$USER /home/$USER/tmp/ > /dev/null 2>&1
error_code="$?"
if [ "$error_code" != "0" ]; then #if file NOT present on mysite then:
echo "File does not exist."
exit
fi
echo "File exists."
Теперь допустим, я создал файл на сервере mysite.com примерно так:
echo > tmp/$USER
Теперь, когда я запускаю вышеописанный скрипт на моем рабочем столе вручную, вот так:
./test.sh
Я получаю результат "Файл существует".
Но если я запускаю его через crontab, я получаю результат "Файл не существует"
Мой crontab выглядит так:
* * * * * /home/user/test.sh >> /home/user/test.log 2>&1
Я провел весь день, пытаясь проверить логику и все остальное ... Кажется, я не могу понять, почему это так. Заранее всем спасибо за помощь:)
Редактировать : scp выглядит на mysite.com:/home/$USER/tmp/ dir
$ USER на моем рабочем столе и сервере одинаковы. Так что я не думаю, что это проблема относительности.
Если бы я был
ssh $USER@mysite.com
, а затем сделать
ls tmp/
Я посмотрю файл там.
Кроме того, запись в crontab находится в моем crontab, а не в crontab другого пользователя или root.
@ Джонатан: Я установил аутентификацию на основе ключей. Пароль не требуется!
@ netcoder: В моем файле журнала я вижу повторяющиеся строки «Файл не существует».
@ sarnold: в моей строке scp я добавил john@mysite.com, просто чтобы убедиться, что cron использует учетную запись john на mysite.com, когда crond запускает скрипт. Тем не менее, тот же результат.