मैं अपने रास्पबेरी पाई पर इस सरल स्क्रिप्ट को ऑटो अपडेट पर चला रहा हूं ताकि मैं इसके बारे में भूल सकूं। यह एक लॉग भी रखता है जो कहता है कि क्या अपडेट सफल था। स्क्रिप्ट अद्यतन है। श:
#!/bin/bash
echo "Update starts on: $(date)" >> /home/pi/update.log
if apt-get update && apt-get upgrade -y; then
echo "update successful $(date)" >> /home/pi/update.log
else
echo "Couldn't update $(date)" >> /home/pi/update.log
fi
मैंने इस स्क्रिप्ट को रूट क्रॉस्टैब के साथ जोड़ दिया sudo crontab -e
और क्रोनजोब को हर दिन सुबह 6 बजे चलाने के लिए तैयार किया
0 6 * * * /home/pi/update.sh
मुझे पता है कि यह कुछ हद तक काम करता है क्योंकि sudo ./update.sh
शेल में चलने से मैन्युअल रूप से कमांड चलता है और लॉग में "सफल" प्रविष्टि छोड़ देता है। दूसरी ओर, जब क्रॉस्टैब से भाग गया, तो मुझे हमेशा "अपडेट नहीं कर सका" प्रविष्टि मिलती है। यदि यह मायने रखता है, तो "pi" उपयोगकर्ता द्वारा "update.sh" स्क्रिप्ट बनाई गई थी और मैंने निष्पादन अनुमतियाँ देने के अलावा कभी भी अनुमतियाँ नहीं बदलीं।
मैंने उसी समस्या के बारे में एक और प्रश्न पढ़ा और उस व्यक्ति ने इसे sudo
कमांड के सामने रखकर हल किया । वह मानते हैं कि यह अजीब है क्योंकि इसे पहले ही रूट द्वारा निष्पादित किया जा रहा है, लेकिन कहते हैं कि यह काम करता है। मैंने जोड़ने का प्रयास किया sudo
और सत्यापित किया कि यह वास्तव में अब काम करता है।
क्या किसी को पता है यह क्यों होता है? sudo
अगर यह पहले से ही जड़ है तो इसकी आवश्यकता क्यों है ?
env
रूट के रूप में टाइप करने की कोशिश करें और फिर sudo env
परिणामों की तुलना करें।
apt-get
कमांड किसी भी त्रुटि की रिपोर्ट करता है ? चूंकि आप इसके आउटपुट को रीडायरेक्ट नहीं कर रहे हैं, इसलिए इसे रूट के मेल के रूप में भेजा जाएगा।