簡體   English   中英

如何使用cron和rsync將文件從遠程服務器傳輸到本地路徑

[英]How to use cron and rsync to transfer files from remote server to local path

我正在尋找一些知識來幫助我理解為什么在使用rsync將文件從遠程服務器傳輸到本地路徑時為什么無法使用cron。

我的目標是在預定時間運行計划的cron作業並成功執行我的傳輸腳本

從眾多Google搜索中,我整理了以下rsync命令:

rsync --protect-args --remove-source-files --chmod=Du=rw,Dgo=rw,Fu=rw,Fog=r -apvzrc pi@192.168.0.10:/media/pi/USBSTORAGE32/ /media/Data_1/"James' Files"/

我已經設置了遠程服務器,因此它不會通過使用ssh-keygen rsa生成存儲在authorised_keys文件中的公共密鑰來詢問​​密碼。 我使用SSH登錄到“本地”計算機,然后鍵入命令以將文件從遠程服務器“拉”到本地計算機。

一旦我測試了上面的rsync命令,我就以為它被釘住了,所以將其彈出到腳本中,然后通過crontab添加到cron中。 我添加的行看起來像這樣

55 * * * * sudo /home/jlivin25/bin/myscripts/sync.sh > /var/log/james/cronsync.log 2>&1

我的腳本如下所示:

#!/usr/bin/env bash
rsync --protect-args --remove-source-files --chmod=Du=rw,Dgo=rw,Fu=rw,Fog=r -apvzrc pi@192.168.0.10:/media/pi/USBSTORAGE32/ /media/Data_1/"James' Files"/

計划任務無法按預期運行,cron嘗試運行腳本,但是以下錯誤消息記錄在我的日志文件中:

sudo: no tty present and no askpass program specified

在這一點上,我感到很困惑,因為通過“搜索”上面的消息,我得到了很多不同的理由,說明我所做的工作沒有用。 我不確定將錯誤追到哪里,這是我使用cron,ssh或rsync的問題。

任何幫助,將不勝感激。

Littlejeem

因此, cron很可能是守護程序,由系統中的cron用戶執行。 cron守護程序決定運行cronjob時,它將作為cron用戶這樣做。 但是很可能不允許cron用戶在您的系統中使用sudo ,因此這引起了所提及的sudo錯誤(因為sudo通常在禁止使用時要求輸入密碼,但是在這種情況下,沒有針對cron用戶的終端或密碼請求程序獲得一個)。

確認的一種方法是運行類似env | sort >/tmp/environment.log 在腳本的開頭env | sort >/tmp/environment.log進行env | sort >/tmp/environment.log在執行后檢查關鍵變量(例如USERHOME )。 當您手動執行腳本時,甚至可以將環境與環境進行比較。

我相信這里的方法顯然是配置sudo以允許cron以“正確”用戶身份運行腳本。 另一種方法是使腳本源(或復制)“正確”用戶的某些環境,因此不需要sudo 我不能說哪個更有效地實現了您的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM