मैं अपने सर्वर में एक दूरस्थ सर्वर से फ़ाइलों की एक गुच्छा की एक प्रतिलिपि बनाए रखने की कोशिश कर रहा हूं, और यह करने के लिए कि मैं हर 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]
तो ऐसा लगता है कि कोंट्राब आंतरिक कमांड का विस्तार नहीं करता है और फाइलों की सूची प्राप्त करने के लिए इसे निष्पादित करता है।
क्या कोंट्राब को सामान्य रूप से लेने के लिए कोई तरीका है? मैं एक-लाइनर के लिए स्क्रिप्ट नहीं बनाता हूं
bash
स्क्रिप्ट जो आप बस से चलाएंगे crontab
। यह एक पंक्ति में पठनीय नहीं है और कोई भी रखरखाव एक बुरा सपना होगा।
/bin/sh
। तो आपको या तो पोर्टेबल शेल कमांड लिखने की ज़रूरत है या बैश के द्वारा आपके कमांड की व्याख्या करने की व्यवस्था करनी होगी। आपकी पंसद।