rsync crontab के अंदर सही तरीके से काम नहीं करता है


0

मैं अपने सर्वर में एक दूरस्थ सर्वर से फ़ाइलों की एक गुच्छा की एक प्रतिलिपि बनाए रखने की कोशिश कर रहा हूं, और यह करने के लिए कि मैं हर 15 मिनट में अपने सर्वर को उन फ़ाइलों को लाना चाहता हूं जो पिछले 15 मिनट में बदल गए हैं (पिछले पुल के बाद से)

फाइलें मेरे बैकअप सर्वर से अंततः नहीं हटाई जा सकती हैं या नहीं, इसलिए मैं सभी फाइलों को rsync नहीं करना चाहता हूं क्योंकि यह उन फ़ाइलों को फिर से कॉपी कर देगा जिन्हें मैंने हर 15 मिनट में हटा दिया है।

इसे प्राप्त करने के लिए मैं हर 15 मिनट में एक rsync करता हूं जो पिछले 15 मिनट के दौरान बदल चुकी फाइलों को इस अंदाज में क्रॉस्टैब में रखता है:

*/15 * * * * rsync -av --files-from=<(ssh root@remote-server 'find /remote/directory -type f -name remote-server-files.* -mmin -15 -exec basename {} \;' ) root@remote-server://remote/directory /local/directory 2> /var/log/rsync_cron.log && echo "[$(date)] Remote files saved successfully" >> /var/log/rsync_cron.log

जब मैं इस कमांड को शेल में चलाता हूं, तो यह ठीक काम करता है।

हालाँकि, जब कॉन्टैब इसे चलाता है, तो यह निम्न त्रुटि देता है: rsync: failed to open files-from file <(ssh root@remote-server find /remote/directory -type f -name remote-server-files.* -mmin -15 -exec basename {} \; ): No such file or directory rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6]

तो ऐसा लगता है कि कोंट्राब आंतरिक कमांड का विस्तार नहीं करता है और फाइलों की सूची प्राप्त करने के लिए इसे निष्पादित करता है।

क्या कोंट्राब को सामान्य रूप से लेने के लिए कोई तरीका है? मैं एक-लाइनर के लिए स्क्रिप्ट नहीं बनाता हूं


शेल में कमांड यह आउटपुट देता है: फ़ाइल सूची प्राप्त करना ... किया गया रिमोट-सर्वर-फाइलें 000001 भेजा गया 163865 बाइट्स प्राप्त हुआ 5819077 बाइट्स 1087807.64 बाइट्स / सेक कुल आकार 553378247 स्पीडअप 92.49
Antonio Ortells

बनाओ bash स्क्रिप्ट जो आप बस से चलाएंगे crontab। यह एक पंक्ति में पठनीय नहीं है और कोई भी रखरखाव एक बुरा सपना होगा।
Jakuje

जैसा कि मैंने उल्लेख किया है कि मैं एक लाइनर के लिए स्क्रिप्ट के साथ सिस्टम को नहीं भरता हूं। जब आप किसी सिस्टम में एक नई स्क्रिप्ट जोड़ते हैं, तो लोग बहुत अधिक प्रश्न पूछते हैं
Antonio Ortells

cron आपके कमांड का उपयोग करके चलेगा /bin/sh। तो आपको या तो पोर्टेबल शेल कमांड लिखने की ज़रूरत है या बैश के द्वारा आपके कमांड की व्याख्या करने की व्यवस्था करनी होगी। आपकी पंसद।
Toby Speight

"जब आप एक सिस्टम में एक नई स्क्रिप्ट जोड़ते हैं तो लोग बहुत अधिक प्रश्न पूछते हैं" - तो तुम यहाँ अच्छा नहीं कर रहे हैं?
Ecnerwal

जवाबों:


0

मैंने खुद को इसका पता लगाया।

समस्या यह थी कि क्रेटाब डिफ़ॉल्ट रूप से बैश पर नहीं चलता है, यह शंट पर चलता है।

मैंने इस लाइन को कोंट्राब के शीर्ष पर जोड़ा और अब यह ठीक काम करता है:

शेल = / bin / bash

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.