Почему sftp скрывает журнал из stdout?

Почему sftp скрывает журнал из stdout?

У меня есть скрипт a.sh, в котором есть sftpкоманда:

echo "Starting to sftp..."
sftp [email protected] << END_SCRIPT
ls
mput *.csv.gz
bye

END_SCRIPT
echo "Sftp successfully."

sftpЕсли я запускаю его интерактивно, отображается вывод журнала из . Однако, если я устанавливаю его в crontab и перенаправляю stdout в файл с помощью >, будет только вывод из двух echoоператоров. Как мне получить журнал из sftpкоманды?

РЕДАКТИРОВАТЬ:

Я попробовал следующие формы, но они тоже не сработали.

sftp -b пакетный_файл.txt[email protected](перенаправление из cron)

sftp -b пакетный_файл.txt[email protected]>> some_file.log (перенаправление из cron + перенаправление из этой строки)

Я думаю, что проблема должна быть связана с природой sftp, который должен работать интерактивно, как указано в man-странице. Но я не могу найти решение.

Мой дистрибутив:Red Hat Enterprise Linux AS release 3 (Taroon Update 2)

запись в crontab:

52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_`date +\%Y\%m\%d`.log

И журнал создается со временем, соответствующим записи в crontab.

ssh-версия:

OpenSSH_3.6.1p2, SSH protocols 1.5/2.0, OpenSSL 0x0090701f

РЕДАКТИРОВАТЬ:

Я обнаружил, что если я перенаправляю вывод sftp в файле скрипта в текстовый файл, сообщение от sftp регистрируется. Затем я удаляю файл журнала и планирую его с помощью cron. После выполнения cron файл журнала создается, но в нем нет сообщений от sftp. Вместо этого он содержит только журнал от другого оператора внутри файла скрипта.

Если я перенаправляю вывод sftp в файл скрипта и запускаю его интерактивно, журналы в порядке. Однако если я запланировал это с помощью cron (без перенаправления в записи crontab, просто запланировал), журналы из sftp тоже исчезают.

решение1

Судя по всему, перенаправление выводаявляетсяпроисходит, но вы, вероятно, хотите включить stderr, также. Попробуйте это в вашем crontab:

52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_`date +\%Y\%m\%d`.log 2>&1

Обратите внимание 2>&1на в конце. Это означает: "перенаправить файловый дескриптор 2, stderr, на тот файловый дескриптор 1, stdout, который есть". Поскольку вы уже перенаправлены stdoutна файл, stderrпопадете туда же.

Связанный контент