كيفية تشغيل gpg من تشغيل البرنامج النصي قبل كرون ؟

StackOverflow https://stackoverflow.com/questions/39867

  •  09-06-2019
  •  | 
  •  

سؤال

لدي البرنامج النصي الذي يحتوي على الجزء الذي يبدو مثل هذا:

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 يعمل بشكل جيد (أرى "تشفير <file>"في السجل) ولكن الملف لا تحصل على تشفير gpg الصامت فشل مع أي المعياري/stderr الانتاج.

أي أدلة ؟

هل كانت مفيدة؟

المحلول

اتضح أن كان الجواب أسهل مما كنت أتوقع.هناك --batch المعلمة في عداد المفقودين ، gpg يحاول قراءة من /dev/tty لا توجد وظائف كرون.التصحيح التي استخدمت --exit-on-status-write-error المعلمة.ولكن استخدام هذا كنت مستوحاة من حالة خروج 2, ذكرت مرددا $? كما Cd-رجل المقترحة.

نصائح أخرى

في حالتي gpg غير قادر على العثور على المنزل dir استخدام مفاتيح:

gpg:لا المفتاح السري الافتراضي هو:لا المفتاح السري

gpg:0003608.cmd:علامة+تشفير فشل:لا المفتاح السري

لذلك أضفت --homedir /root/.gnupg.الأمر النهائي يمكن أن يبدو

echo 'كلمة السر' | gpg -ت ت ت --homedir /root/.gnupg ----دفعة المرور-fd 0 --إخراج /usr/share/الملف.gpg --تشفير --علامة /usr/share/الملف.القطران.bz2

يجب عليك التأكد من أن GPG في المسار الخاص بك عندما cronjob تشغيل.أفضل تخمين سيكون الحصول على المسار الكامل GPG (عن طريق القيام which gpg) و تشغيله باستخدام المسار الكامل (على سبيل المثال /usr/bin/gpp...).

بعض التصحيح النصائح:

  • إخراج قيمة $? بعد تشغيل GPG (مثل هذا:echo "$?").هذا يعطيك الخروج على القانون الذي ينبغي أن يكون 0 ، إذا ما نجحوا
  • توجيه STDERR إلى المعياري على GPG ثم توجيه المعياري إلى ملف لفحص أي رسائل الخطأ التي قد تحصل المطبوعة (يمكنك القيام بذلك من سطر الأوامر: /usr/bin/gpg ... 2>&1 >> gpg.log)

تأكد من أن المستخدم الذي يتم تشغيل وظيفة كرون لديه الأذونات اللازمة تشفير الملف.

لقد صادفت هذه المشكلة مرة واحدة.

لا أستطيع حقا أن أقول لك لماذا ولكن لا أعتقد كرون ينفذ مع نفس البيئة متغير باسم المستخدم القيام به.

أنا فعلا كان تصدير طريق الخير لبلدي برامج لتنفيذ جيدا.هو gpg على الأقل محاولة تنفيذه ؟

أو هي الملفات التي تحاول encypt فعلا في الدليل الحالي عندما كرون ينفذ?

ربما محاولة تنفيذ echo whereis gpg و echo $PATH في السيناريو الخاص بك لمعرفة ما اذا كان هو مدرج...عملت بالنسبة لي.

@skinp وظائف كرون يتم تنفيذها بواسطة sh, في حين أن معظم الحديث Unixes استخدام لسحق أو ksh لتسجيل الدخول التفاعلية.المشكلة الأكبر (من خلال تجربتي) هو أن الشيخ لا يفهم الأشياء مثل:

export PS1='\u@\h:\w> '

الذي يحتاج إلى تغيير إلى:

PS1='\u@\h:\w> '
export PS1

حتى إذا كرون يعمل قذيفة النصي الذي يحدد بيئة متغير باستخدام أول جملة, قبل تشغيل بعض الأوامر الأخرى ، وغيرها من الأوامر لن يعدم لأن sh القنابل في محاولة لتعريف المتغير.

في حالتي:"gpg:فشل عملية فك الشفرة:سيئة الدورة الرئيسية".

حاول إضافة /usr/bin/gpg, التحقق من الإصدار ، setting --دفعة ، setting --المنزل (مع /root/.gnupg و /home/user/.gnupg) و كل ما لم يعمل.

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

تبين أن كرون على AWS الفاصولياء سبيل المثال اللازمة متغير البيئة المستخدمة لتعيين --المرور $GPG_PP.كرون الآن:

0 15 * * * $(source /opt/elasticbeanstalk/support/envvars && /home/ec2-user/bin/script.sh >> /home/ec2-user/logs/cron_out.log 2>&1)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top