/Etc/init.d/ dosyasında, ev dizinlerinden diğer (root ayrıcalı olmayan) kullanıcıların diğer komut dosyalarını çalıştırmış gibi çalıştırmaları gereken bir komut dosyası oluşturdum.
Bu senaryoları aşağıdakilerle başlatırım: sudo -b -u <username> <script_of_a_particular_user>
Ve çalışıyor. Ancak çalışmaya devam eden her kullanıcı komut dosyası için (örneğin bazı bekçi köpeği), hala canlı ve kök olarak çalışan karşılık gelen bir üst sudo işlemi görüyorum. Bu, etkin işlemler listesinde karışıklık yaratır.
Yani sorum şu: Başka bir kullanıcı olarak mevcut bash komut dosyasından başka bir komut dosyasını nasıl başlatabilirim (çatallayabilir) ve artık (tek başına) bir işlem olarak bırakabilirim?
Daha ayrıntılı bir açıklama:
Temelde .startUp ve .shutDown adlı kendi ana dizininde bulunan ilgili alt dizinlerde bulunan yürütülebilir dosyaları çalıştırarak sistemdeki diğer kullanıcılara sistem başlangıcında veya sistem kapatıldığında bir şeyler çalıştırmak için bir araç sağlamaya çalışıyorum. Bunu yapmak için başka bir yol bulamadığım için, tam olarak bunu yapan bash betiğimi yazdım ve /etc/init.d/ içinde bir servis betiği olarak (iskelet örneğini izleyerek) yapılandırdım, böylece çalıştırıldığında start argümanı ile .startUp dizinlerinden her şeyi başlatır ve stop argümanı ile çalıştırıldığında, her kullanıcının tüm .shutDown dizinlerinden her şeyi başlatır.
Alternatif olarak, bu sorunu çözmek için mevcut bir çözümü de kullanabilir miyim?
GÜNCELLEME
Biraz etrafa baktım ve şu soruyu buldum:
/unix/22478/detach-a-daemon-using-sudo
Orada kabul edilen cevap, kullanmak için:, sudo -u user sh -c "daemon & disown %1"
benim için çalışıyor. Ama % 1'i reddetmeden de denedim ve aynı. Yani beklediğim gibi benim için işe yarıyor:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
Şimdi ek sorum şu: Neden tartışmasız çalışıyor? Bazı özel durumlar için reddetme çağrısını hala bırakmalı mıyım?
GÜNCELLEME 2
Görünüşe göre bu da işe yarıyor:
su <username> -c "<script_of_a_particular_user> &"
Bu çağrı ile sudo çağrısı arasında herhangi bir fark var mı? Bunun potansiyel olarak tamamen farklı bir soru olduğunu biliyorum. Ama burada cevapları kendim bulduğum için belki bu konu uğruna birisi burada açıklığa kavuşabilirdi.
GÜNCELLEME 3
Bu yöntemlerin her ikisi de su veya sudo ile artık makineyi başlattıktan sonra yeni bir startpar işlemi (root olarak çalışan tek işlem) üretiyor . İşlem listesinde şu şekilde görünür:
startpar -f -- <name_of_my_init.d_script>
Bu süreç neden ortaya çıkıyor? Açıkçası ben başka bir init.d komut dosyası bu işlemi çalışan beri yanlış bir şey yapıyorum.
GÜNCELLEME 4
Startpar ile ilgili sorun çözüldü. Bunun için başka bir soru başlattım:
rc.local veya init.d'den işlemleri başlatırken startpar işlemi asılı kaldı.
Ayrıcalıklı olmayan kullanıcılar için başlatma mekanizmalarını daha ayrıntılı tartışmak için başka bir soru:
Normal kullanıcılara (root olmayan) başlatma ve kapatma otomatik çalıştırma yetenekleri sağlama