![Проблема с передачей файла из Linux в Windows с помощью smbclient](https://rvso.com/image/1312941/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0%20%D1%81%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B5%D0%B9%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20%D0%B8%D0%B7%20Linux%20%D0%B2%20Windows%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20smbclient.png)
У меня на компьютере с 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.
решение1
Cron пытается отправить письмо (используя /usr/bin/sendmail
), когда команда не выполняется — это единственный известный мне способ получить фактический вывод скрипта (вы можете установитьsSMTPчтобы это работало довольно легко). Основное отличие в среде cron обычно заключается в том $PATH
, что , поэтому попробуйте установить соответствующий параметр PATH
в crontab, который включает каталог, где smbclient
находится.
решение2
В итоге я немного переписал сценарий, чтобы он звучал так:
#!/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, чтобы она запускалась с меньшей частотой ;)