Bir dizin başka bir kullanıcı tarafından değiştirildiğinde komut dosyası nasıl çalıştırılır?


13

Buna benzer konular hakkında biraz tartışma olduğunu biliyorum. Ama temelde yapmaya çalıştığım şey bu.

Ben denilen bir izleme dizini var watchedve bu dizine bir dosya eklendiğinde, o dizinden syncbh.shdosyaları alıp uzak bir sunucuya yükleyecek denilen bir komut dosyası tetiklemek istiyorum .

Uyarı, dosyaların watcheddizinde bir kullanıcı (kullanıcı2) tarafından oluşturulmuş olması , ancak komut dosyasının başka bir kullanıcı (kullanıcı1) tarafından yürütülmesi.

Bunu başarmak için incron kullanmayı denedim , ancak komut dosyası root ayrıcalıklarıyla user1 tarafından manuel olarak çalıştırılabilirken, incron arka plan programı aslında diğer user2 tarafından bir dosya oluşturma olayı tarafından otomatik olarak tetiklenmediği için büyük bir sorunla karşılaşmaya devam ettim .

Anlatmanın daha iyi bir alternatif olup olmayacağını düşündüm , ancak bunun sözdiziminin nasıl çalıştığı konusunda net değilim. Bunu başarmak için daha iyi bir yol varsa veya inoticoming kullanıyorsam , komut sözdizimi /home/user1/watcheddizini izlemesini ve bu dizinde /usr/local/bin/syncbh.shbir dosya oluşturulursa / değiştirilirse komut dosyasını yürütmesini ister mi?

Herhangi bir yardım çok takdir edilecektir.


Hangi kullanıcı komut dosyasını çalıştırmalıdır?
AB

Ve hangi kullanıcının çalışması gerektiği inoticoming?
AB

Lütfen ihtiyaçlarınızı karşılayan cevabı kabul edin, ben de bu cevaba ödül vereceğim.
Helio

Yanıtlar:


5

Kullanma inoticoming:

Önyükleme zamanında /etc/init.d/çalışan bir komut dosyası koyabilirsiniz inoticoming.

  1. Tutmak için yeni bir klasör oluşturun inoticomingson / log pidiçin watchedklasörün:sudo mkdir -p /var/log/inoticoming/watched/

  2. Senaryo oluşturun inoticoming_watchediçinde /etc/init.d/:

* <path_to_folder> ve <path_to_script> öğelerini watchedklasörün tam yolu ve çalıştırılacak komut dosyasının tam yoluyla eşleşecek şekilde değiştirmeyi unutmayın.

#!/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. Komut dosyasını yürütülebilir olarak işaretleyin: sudo chmod u+x /etc/init.d/inoticoming_watched

  2. Tarafından çağrılan komut dosyasının inoticoming_watchedyürütülebilir olduğundan emin olun .

  3. rc.dHizmetin inoticoming_watchedönyükleme zamanında başlamasını sağlamak için güncelleme :sudo update-rc.d inoticoming_watched defaults

inoticomingGiriş yapabilirsiniz /var/log/inoticoming/watched.


4

Her şeyden önce, inoticoming yükleyin :

sudo apt-get install inoticoming

Ardından şu komutu kullanın:

Devam eden devam eden süreçlere dikkat edin, çünkü birden çok kez başlatılabilirler.

$ inoticoming /home/user1/watched /usr/local/bin/syncbh.sh /home/user1/watched/{} \;
              ^                   ^                        ^
              |                   |                        |
              ^-- The directory to be monitored            |
                                  |                        |
                                  ^-- Your script          |
                                                           ^-- The parameter for your script
  • Süreç artalanda çalışıyor ve izliyor /home/user1/watched

  • Bu dizine bir dosya eklendiğinde veya değiştirildiğinde, komut dosyası /usr/local/bin/syncbh.shçağrılır.

    • Bu komut dosyasının parametresi bu durumda /home/user1/watched/<name_of_changed_or_modified_file>

    • {} dosya adı ile değiştirildi


-2

Her şeyden önce, watcheddizini izlemek için bir komut dosyası :

#! /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

İkinci Başka bir kullanıcı (kullanıcı2) olarak senkronizasyon yapmak için:

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

Artık kullanıcı isteminde bulunmamak için sudoşifrenizi bir dosyada ayarlayabilir ve gerektiğinde bu dosyadan şifreyi okuyabilirsiniz (şifreyi dosyadan almak için -Sbirlikte kullanmanız gerektiğini unutmayın sudo).

sudoParolanızı bir dosyaya koyun , diyelim ki passwd.txtyukarıdaki komut aşağıdaki gibi emilecek

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

Şimdi genel script şöyle olacak:

#! /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: Parolayı asla düz metin dosyasına koymayın.
Helio
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.