我的 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
/usr/bin/sendmail
當命令失敗時,Cron 嘗試發送郵件(使用)——這是我所知道的獲取腳本實際輸出的唯一方法(您可以安裝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 選項卡以降低運行頻率;)