जब कोई निर्देशिका किसी अन्य उपयोगकर्ता द्वारा बदल दी जाती है, तो स्क्रिप्ट कैसे चलाएं?


13

मुझे पता है कि इस तरह के विषयों के बारे में थोड़ी चर्चा हुई है। लेकिन यहाँ मैं मूल रूप से करने की कोशिश कर रहा हूँ।

मेरे पास एक वॉच डायरेक्टरी है जिसे कॉल किया जाता है watchedऔर जब भी उस डायरेक्टरी में कोई फाइल जोड़ी जाती है, तो मैं एक स्क्रिप्ट को ट्रिगर करना चाहता हूं, syncbh.shजो उस डायरेक्टरी से फाइल्स लेगी और उन्हें रिमोट सर्वर पर अपलोड करेगी।

चेतावनी यह है कि फ़ाइलों को watchedएक उपयोगकर्ता (user2) द्वारा निर्देशिका में बनाया जाता है , लेकिन स्क्रिप्ट को दूसरे (user1) द्वारा निष्पादित किया जाता है।

मैंने इसे पूरा करने के लिए इंक्रॉन का उपयोग करने की कोशिश की है , लेकिन एक बड़ी समस्या में चल रहा है क्योंकि स्क्रिप्ट को रूट-विशेषाधिकार के साथ उपयोगकर्ता 1 द्वारा मैन्युअल रूप से निष्पादित किया जा सकता है, फिर भी एरिकॉन डेमन वास्तव में अन्य उपयोगकर्ता 2 द्वारा फ़ाइल निर्माण घटना से स्वचालित रूप से ट्रिगर नहीं होता है।

मैंने सोचा है कि क्या inoticoming एक बेहतर विकल्प होगा, लेकिन मैं इस बारे में स्पष्ट नहीं हूं कि इस काम का सिंटैक्स कैसे है। अगर इसे पूरा करने का एक बेहतर तरीका है, या यदि मैं inoticoming का उपयोग करके समाप्त करता हूं, तो कमांड सिंटैक्स क्या होगा ताकि वह /home/user1/watchedडायरेक्ट्री देख सके और /usr/local/bin/syncbh.shअगर उस डायरेक्टरी के भीतर कोई फाइल बनती / संशोधित होती है तो वह स्क्रिप्ट को निष्पादित कर सकता है?

कोई भी सहायताकाफी प्रशंसनीय होगी।


किस उपयोगकर्ता को स्क्रिप्ट चलाना चाहिए?
एबी

और किस उपयोगकर्ता के रूप में चलना चाहिए inoticoming?
एबी

कृपया उस उत्तर को स्वीकार करें जो आपकी आवश्यकताओं के अनुसार है और मैं उस उत्तर का इनाम दूंगा।
हेलियो

जवाबों:


5

का उपयोग कर inoticoming:

आप /etc/init.d/उस स्क्रिप्ट inoticomingको बूट समय पर चला सकते हैं।

  1. एक नया फ़ोल्डर बनाएँ धारण करने के लिए inoticomingपिछले लॉग / pidके लिए watchedफ़ोल्डर:sudo mkdir -p /var/log/inoticoming/watched/

  2. एक स्क्रिप्ट बनाएं inoticoming_watchedमें /etc/init.d/:

* watchedफ़ोल्डर के पूर्ण पथ और स्क्रिप्ट को निष्पादित करने के लिए पूर्ण पथ से मिलान करने के लिए <path_to_folder> और <path_to_script> बदलना याद रखें

#!/bin/sh

case "${1}" in
    start)
        inoticoming --logfile '/var/log/inoticoming/watched/inoticoming.log' --pid-file '/var/log/inoticoming/watched/inoticoming_last_pid.txt' <path_to_folder> <path_to_script> \;
    ;;

    stop)
        kill -15 $(< /var/log/inoticoming/watched/inoticoming_last_pid.txt tee)
    ;;

    restart)
        ${0} stop
        sleep 1
        ${0} start
    ;;

    *)
    echo "Usage: ${0} {start|stop|restart}"
    exit 1
    ;;
esac
  1. स्क्रिप्ट को निष्पादन योग्य के रूप में चिह्नित करें: sudo chmod u+x /etc/init.d/inoticoming_watched

  2. सुनिश्चित करें कि द्वारा लिखी गई स्क्रिप्ट inoticoming_watchedनिष्पादन योग्य है।

  3. बूट समय पर rc.dसेवा inoticoming_watchedशुरू करने के लिए अपडेट करें :sudo update-rc.d inoticoming_watched defaults

आप inoticomingलॉग इन चेक कर सकते हैं /var/log/inoticoming/watched


4

सबसे पहले, स्थापित inoticoming :

sudo apt-get install inoticoming

फिर इस कमांड का उपयोग करें:

इकोनोमिंग की चल रही प्रक्रियाओं पर ध्यान दें, क्योंकि उन्हें कई बार शुरू किया जा सकता है।

$ inoticoming /home/user1/watched /usr/local/bin/syncbh.sh /home/user1/watched/{} \;
              ^                   ^                        ^
              |                   |                        |
              ^-- The directory to be monitored            |
                                  |                        |
                                  ^-- Your script          |
                                                           ^-- The parameter for your script
  • प्रक्रिया बैकगाउंड में चलती है और देख रही है /home/user1/watched

  • जब कोई फ़ाइल उस निर्देशिका में जोड़ी या बदली जाती है, तो स्क्रिप्ट /usr/local/bin/syncbh.shको कहा जाता है।

    • इस स्क्रिप्ट का पैरामीटर इस मामले में है /home/user1/watched/<name_of_changed_or_modified_file>

    • {} फ़ाइल नाम से बदल दिया गया है


-2

सबसे पहले, watchedनिर्देशिका देखने के लिए एक स्क्रिप्ट :

#! /bin/bash

folder=/path-to-watched

inotifywait -m -q  -e create  -e modify  '%:e %w%f' $folder | while read file
  do
    #make the sync here
  done

दूसरा किसी अन्य उपयोगकर्ता (user2) के रूप में सिंक बनाने के लिए:

sudo -H -u user2 bash -c 'sh /usr/local/bin/syncbh.sh ' 

अब यूजर प्रॉम्प्ट न बनाने के लिए, आप अपना sudoपासवर्ड किसी फाइल में सेट कर सकते हैं और जरूरत पड़ने पर इस फाइल से पासवर्ड पढ़ सकते हैं (ध्यान दें कि आपको फाइल से पासवर्ड प्राप्त करने के लिए उपयोग -Sकरना sudoहै)।

अपने sudoपासवर्ड को एक फ़ाइल में रखो , मान लीजिए passwd.txt, फिर ऊपर की कमान की तरह चूसना होगा

sudo -S -H -u user2 bash -c 'sh /usr/local/bin/syncbh.sh ' < /path-to/passwd.txt

अब समग्र पटकथा इस प्रकार होगी:

#! /bin/bash

folder=/path-to-watched

inotifywait -m -q  -e create  -e modify  '%:e %w%f' $folder | while read file
  do
      sudo -S -H -u user2 bash -c 'sh /usr/local/bin/syncbh.sh ' < /path-to/passwd.txt      
done

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