smbclient를 사용하여 Linux에서 Windows로 파일을 푸시하는 문제

smbclient를 사용하여 Linux에서 Windows로 파일을 푸시하는 문제

Python 스크립트에 의해 생성된 Linux 상자에 파일이 있는데, 이 파일은 /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에서 실행됩니다. 내가 이해한 바에 따르면 루트와는 약간 다른 환경에서 실행됩니다(또는 적어도 작동 방식이 그런 것 같습니다).

crontab이 아닌 스크립트를 직접 실행하면 문제 없이 실행되고 파일은 대상 Windows 서버 상자로 전송됩니다. 내 생각엔 put 명령의 일부로 HRDataFeed.txt 파일에 대한 전체 경로를 제공해야 할 수도 있습니다. 그러나 나는 그것을 알아낼 수 없는 것 같습니다.

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

파일에 오류가 발생합니다./root/HRDataFeed.txt찾을 수 없다.

어떤 의견이라도 대단히 감사하겠습니다.

편집하다

읽기 위해 crontab을 업데이트하려고 했습니다(테스트를 위해 매분마다 실행했습니다).

          • /root/hrdatafeed > last_run.txt

그러나 파일에는 아무것도 포함되지 않은 것 같습니다.

SMBClient 명령에 직접 파이프를 추가해 보겠습니다.

답변1

Cron은 명령이 실패할 때 (을 사용하여) 메일을 보내려고 시도합니다 /usr/bin/sendmail. 이것이 스크립트의 실제 출력을 얻는 유일한 방법입니다(설치할 수 있음).sSMTP이 작업을 상당히 쉽게 수행하려면). cron 환경의 주요 차이점은 일반적으로 이므로 디렉토리가 포함된 crontab에서 $PATH적절한 설정을 시도해 보십시오 .PATHsmbclient

답변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 탭을 업데이트하겠습니다.)

관련 정보