2

У меня есть файл, расположенный на моей коробке Linux, который генерируется скриптом Python, файл помещается в каталог /root /

Мой скрипт bash выглядит так:

#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
# the file created here will land one directory above the scripts in /root/
python main.py     

# Transfer the file to the server
cd /root/
smbclient \\\\[SERVER]\\[SHARE] --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'

Все работает по желанию до последней строки. Это должно быть выполнено с ошибкой (хотя я не совсем уверен, как выяснить, что это может быть за ошибка).

Эта работа выполняется из crontab. Который, как я понимаю, работает в несколько иной среде, чем root (или, по крайней мере, похоже, как он себя ведет).

Если я выполняю сценарий напрямую (не из crontab), он запускается без сбоев, и файл передается на конечный сервер Windows. Я предполагаю, что, возможно, мне нужно указать полный путь к файлу HRDataFeed.txt как часть команды put; однако я не могу понять это.

smbclient .... -c "put /root/HRDataFeed.txt"

приводит к ошибке, что файл /root/HRDataFeed.txt не может быть найден.

Любой вклад с благодарностью.

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

Я попытался обновить свой crontab для чтения (для тестирования у меня он работал каждую минуту)

          • /root/hrdatafeed> last_run.txt

Однако ничто, казалось, никогда не попадало в файл.

Я постараюсь просто добавить канал непосредственно в команду SMBClient.

2 ответа2

4

Cron пытается отправить письмо (используя /usr/bin/sendmail) при сбое команды - это единственный известный мне способ получить реальный вывод скрипта (вы можете установить sSMTP, чтобы это работало довольно легко). Основным отличием в среде cron обычно является $PATH , поэтому попробуйте установить соответствующий PATH в crontab, который включает каталог, в котором находится smbclient .

1

В итоге я немного переписал сценарий так:

#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
python main.py

# Transfer the file to the server
cd /root/
/usr/bin/smbclient \\\\[SERVER]\\HRDataFeed --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'

Я изменил свой crontab на это:

          • sh /root/hrdatafeed.sh> /root /last_run> 2> & 1

Наконец удалось получить несколько значимых сообщений в последнем файле запуска. Хотя ошибок не было, я предполагаю, что это произошло потому, что я изменил настройку полного пути к команде smbclient.

Спасибо за всю помощь в получении этого отработанного.

Теперь, конечно, я обновлю вкладку cron для запуска с меньшей частотой;)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .