2008-09-02 15 views
26

मेरे पास एक स्क्रिप्ट है जिसमें ऐसा कोई हिस्सा है जो इस तरह दिखता है:क्रॉन द्वारा चलाए गए स्क्रिप्ट से जीपीजी कैसे चलाएं?

for file in `ls *.tar.gz`; do 
    echo encrypting $file 
    gpg --passphrase-file /home/$USER/.gnupg/backup-passphrase \ 
    --simple-sk-checksum -c $file 
done 

अगर मैं इस स्क्रिप्ट को मैन्युअल रूप से चलाता हूं, तो पूरी तरह से ठीक काम करता है और सभी फाइलें एन्क्रिप्ट की जाती हैं। यदि मैं इसे क्रॉन जॉब के रूप में चलाता हूं, तो echo $file ठीक काम करता है (मुझे लॉग में "< फ़ाइल > एन्क्रिप्ट करना" दिखाई देता है), लेकिन फ़ाइल एन्क्रिप्टेड नहीं होती है और gpg मूक कोई stdout/stderr आउटपुट के साथ विफल रहता है।

कोई सुराग?

उत्तर

25

यह पता चला है कि उत्तर अपेक्षा से आसान था। --batch पैरामीटर गायब है, जीपीजी/dev/tty से पढ़ने की कोशिश करता है जो क्रॉन नौकरियों के लिए मौजूद नहीं है। डीबग करने के लिए मैंने --exit-on-status-write-error परम का उपयोग किया है। लेकिन इसका उपयोग करने के लिए मैं बाहर निकलने की स्थिति 2 से प्रेरित था, सीडी-मैन के सुझाव के रूप में $? गूंजकर रिपोर्ट किया गया।

+2

इसके लिए धन्यवाद, हमारे पास एक ही समस्या थी! – latortuga

+0

यहां एक ही समस्या है। --बैच काम किया। – user1052080

+0

आपको बहुत धन्यवाद, यहां एक ही समस्या है। उन्हें gpg --help में --batch विकल्प शामिल करना चाहिए ... कम से कम मेरे संस्करण (1.4.10) में यह गायब है। – tbk

0

यकीन क्रॉन जॉब चलाने वाले उपयोगकर्ता अनुमतियों फ़ाइल को एन्क्रिप्ट करने के लिए आवश्यक है बनाते हैं।

0

मैं एक बार इस समस्या में आए गए हैं।

मैं वास्तव में आप बता सकते हैं क्यों नहीं है, लेकिन मुझे लगता है कि क्रॉन एक ही वातावरण चर उपयोगकर्ता के रूप में कर के साथ कार्यान्वित नहीं है।

मैं वास्तव में अच्छा पथ निर्यात करने के लिए मेरे कार्यक्रमों में अच्छी तरह से निष्पादित करने के लिए किया था। क्या कम से कम जीजीपी निष्पादित करने की कोशिश कर रहा है?

या फ़ाइलें आप वर्तमान निर्देशिका में वास्तव में encypt जब क्रॉन कार्यान्वित की कोशिश कर रहे हैं?

शायद अपनी स्क्रिप्ट में echo whereis gpg और echo $PATH निष्पादित करने का प्रयास करें ताकि यह शामिल हो सके कि इसमें शामिल है ... मेरे लिए काम किया गया है।

1

आप यह सुनिश्चित करें कि GPG जब cronjob चल रहा है अपने रास्ते में है या नहीं। आपका सबसे अच्छा अनुमान GPG का पूरा पथ प्राप्त होगा (which gpg करके) और इसे पूर्ण पथ का उपयोग करके चलाएं (उदाहरण के लिए /usr/bin/gpp...)।

कुछ अन्य डीबगिंग टिप्स:

  • उत्पादन GPG चलाने के बाद $? का मूल्य (इस तरह: "$" गूंज)। यह आपको
  • एसपीडीईआरआर को जीपीजी के लिए एसटीडीओयूटी पर रीडायरेक्ट करने के लिए रीडायरेक्ट करता है और उसके बाद एसटीडीओयूटी को एक फाइल में रीडायरेक्ट करता है, मुद्रित हो सकता है कि किसी भी त्रुटि संदेश का निरीक्षण करने के लिए (आप इसे कमांड लाइन कर सकते हैं : /usr/bin/gpg ... 2>&1 >> gpg.log)
0

@skinp क्रॉन नौकरियां sh द्वारा निष्पादित की जाती हैं, जबकि अधिकांश आधुनिक यूनिक्स इंटरैक्टिव लॉगिन के लिए बैश या केश का उपयोग करते हैं।

export PS1='\[email protected]\h:\w> ' 

जो जरूरत के लिए परिवर्तित किया जा सकता:

PS1='\[email protected]\h:\w> ' 
export PS1 

तो अगर क्रॉन एक खोल स्क्रिप्ट है जो एक पर्यावरण को परिभाषित करता है चलाता है सबसे बड़ी समस्या (मेरे अनुभव में) है कि श जैसी चीजों को नहीं समझता है कुछ अन्य कमांड चलाने से पहले, पहले वाक्यविन्यास का उपयोग करके परिवर्तनीय, अन्य कमांड कभी निष्पादित नहीं किया जाएगा क्योंकि चर को चर परिभाषित करने की कोशिश कर रहे हैं।

5

मेरे मामले में GPG कुंजी का उपयोग नहीं कर सकते के लिए घर dir लगता है:

GPG: कोई डिफ़ॉल्ट गुप्त कुंजी: नहीं गुप्त कुंजी

GPG: 0003608.cmd: हस्ताक्षर + एन्क्रिप्ट में विफल रहा है: नहीं गुप्त कुंजी

तो मैंने --homedir /root/.gnupg जोड़ा। अंतिम आदेश

गूंज 'पासवर्ड' जैसा दिख सकता है। gpg -vvv --homedir /root/.gnupg --batch --passphrase-fd 0 --output /usr/share/file.gpg --encrypt --sign /usr/share/file.tar.bz2

0

मेरे मामले में: "gpg: डिक्रिप्शन विफल: खराब सत्र कुंजी"।

जोड़ने/usr/bin/gpg जोड़ने, संस्करण की जांच, सेटिंग - बैच, सेटिंग - कुछ (/root/.gnupg और /home/user/.gnupg के साथ) और सभी काम नहीं कर पाए।

/usr/bin/gpg -d --batch --homedir /home/ec2-user/.gnupg --no-mdc-warning -quiet --passphrase "$GPG_PP" "$file" 

बीनस्टॉक उदाहरण की जरूरत वातावरण चर --passphrase $ GPG_PP स्थापित करने के लिए इस्तेमाल किया जा रहा एडब्ल्यूएस पर कि क्रॉन पता चला। क्रॉन अब:

0 15 * * * $(source /opt/elasticbeanstalk/support/envvars && /home/ec2-user/bin/script.sh >> /home/ec2-user/logs/cron_out.log 2>&1) 
संबंधित मुद्दे