it-swarm.asia

Bir launchd komutunu root olarak nasıl çalıştırırım?

Aşağıdaki launchctl komutunu .plist dosyası olarak aldım. Yüklendi ve günde bir kez çalışacak şekilde ayarlandı ancak kök olarak çalışması gerekiyor ve bunun nasıl doğrulandığından emin değilim.

Ayrıca, bu cron işi temel olarak bir dizine CD'ler ekler ve bir komutu çalıştırır. Başlatmanın, komutu çalıştırması gereken dizini belirtmek için daha iyi bir yol olduğuna eminim.

Kök olarak çalıştığını ve bunu yazmanın daha iyi bir yolu olduğunu nasıl bilebilirim?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>dev.project.frontpage.feedparser</string>
    <key>ProgramArguments</key>
    <array>
        <string>cd</string>
        <string>/Users/eman/src/project/trunk/includes/;</string>
        <string>./feed-parser.php</string>
        <string>-c</string>
        <string>./feed-parser-config.xml</string>
    </array>
    <key>QueueDirectories</key>
    <array/>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>12</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
    <key>WatchPaths</key>
    <array/>
</dict>
</plist>
32
Emmanuel Mwangi

.plist hangi klasörde saklanır?

launchd, Daemons'u (/Library/LaunchDaemons veya /System/Library/LaunchDaemons) root olarak çalıştırır ve kullanıcıların giriş yapıp yapmamasına bakılmaksızın bunları çalıştıracaktır. Başlatma Ajanları (/Library/LaunchAgents/ veya ~/Library/LaunchAgents/), bir kullanıcı o kullanıcı olarak oturum açtığında çalıştırılır. Setuid'i betiği çalıştıran kullanıcı aracını üzerinde değiştirmek için kullanamazsınız.

/Library/LaunchDaemons içine eklemek isteyeceğiniz için, yönetici ayrıcalıklarıyla launchd içine yüklediğinizden emin olmak isteyeceksiniz (örn. Sudo launchctl load -w /Library/LaunchDaemons/com.Apple.samplelaunchdscript.plist)

Daha fazla bilgi için man launchd göz atın.

46
Chealion

Başlatma editörlerinden birini kullanmayı denediniz mi?

Kök olarak çalıştırıldığından emin olmak için, fırlatmanın programları kök olarak çalıştıracağından eminim. Senaryoyu chmod kullanarak root olarak kullanmayı hiç düşündün mü? Bu şekilde, root olarak çalıştırılmadıkça çalıştırılmaz. Daha sonra çalıştığını doğrulamanız gerekir.

Sudo chown root:admin script_to_run_by_launchd
4
hanleyp

LaunchAgents'taki özellik listeleri de çalışır, ancak Sudo ile hem aracıları hem de günlükleri yüklemeniz gerekir:

Sudo chown root /Library/LaunchAgents/test.plist
Sudo launchctl load /Library/LaunchAgents/test.plist

Pist devre dışı bırakılmış bir tuşa sahip değilse, bir sonraki oturum açışında yüklenir veya varsayılan olarak yeniden başlatılır ve -w gerekli değildir.

Teknik Not TN2083: Daemons ve Acenteleri :

Bir arka plan programı, genel sistemin bir parçası olarak arka planda çalışan bir programdır (yani belirli bir kullanıcıya bağlı değildir). Bir arka plan programı herhangi bir GUI gösteremez; daha spesifik olarak, pencere sunucusuna bağlanmasına izin verilmez.

[...]

Bir aracı, arka planda belirli bir kullanıcı adına çalışan bir işlemdir. Temsilciler yararlıdır, çünkü kullanıcıların giriş dizinine güvenli bir şekilde erişmek veya pencere sunucusuna bağlanmak gibi, zindanların yapamayacağı şeyleri yapabilirler.

3
Lri

Özel olarak bir Başlatma Aracısı bir Başlatma yerine kök ayrıcalıklara sahip olmak isteyen Ajanlar Daemon , tarafından yapılabilir:

  • LaunchAgent'ınızı ~/Library/LaunchAgents içinde oluşturun
  • Başvurunuzu Sudo ile, plistinizde ProgramArguments özelliği ile çalıştırın
  • Uygulamanız için NOPASSWD seçeneğini /etc/resolvers.d olarak ayarlayın

Daha fazla ayrıntı için, this ve this cevaplarına bakın.

3
Cory Klein

LaunchControl Yosemite'de benim için acısız yaptı. Servis oluşturmanıza veya düzenlemenize yardımcı olacak güzel bir sürükle bırak GUI'sine sahiptir. Benim bilmediğim çalışan tüm hizmetleri görmek şaşırtıcıydı.

Adımlar

  1. LaunchControl'ü Başlat
  2. GlobalDeamons'da sol üste geçiş yapın ve yönetici şifrenizi girin
  3. Dosya-> Yeni
  4. Etiketin altına benzersiz bir ad verin. Sözleşme "com.company.appname" dir
  5. Çalıştırılacak Program altında, Unix Kabuğu komut dosyasını veya WITHOUT bağımsız değişkenlerini tercih ettiğiniz komutları kullanın.
  6. Uygulamanız argümanlar gerektiriyorsa, açılır alanı "Varsayılan argv" den "Özel argv" olarak değiştirin
    1. şimdi asıl komut satırından çalıştıracağınız gibi normal yaptığınız argümanı sağlayın.
  7. Yükte Çalıştır isteğe bağlıdır, siz karar verin.
  8. Sağ taraftan StartInterval'i sürükleyip bırakın ve istediğiniz aralığı ayarlayın. Yardım menüsü altındaki FAQ çok iyi.
2
Jose Leon