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


32

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ğrulanacağı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şlatma işleminin, 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>

Yanıtlar:


46

.plistDepolanan hangi klasör ?

launchdDaemons'u ( /Library/LaunchDaemonsveya /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.

Çünkü onu eklemek /Library/LaunchDaemonsisteyeceksiniz launchd, yönetici ayrıcalıklarına (örneğin sudo launchctl load -w /Library/LaunchDaemons/com.apple.samplelaunchdscript.plist) yüklediğinizden emin olmak isteyeceksiniz .

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


Teşekkür ederim. Bu tam olarak kök konuyu yanıtlamak için aradığım şeydi. Betik / Library / LaunchDaemons içindedir, bu yüzden zaten root olarak çalışıyordu.
Emmanuel Mwangi

Acemi bir soru: Çalışan launchctlbir daemon yüklemek için gerekli? Yani, plist dosyasını ilgili yola kopyalamak yetmiyor mu?
Claudix

@ Claudix: Bu doğru. Fırlatma yapılandırmasını yerine kopyalamak yeterli değil - yine de "açmanız" gerekir (launchctl yükü)
Chealion

4

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

Bu senaryoyu yazmak için Lingon'u kullandım. Ve Leopard'da iyi işlediğini doğrulayabilirim.
Emmanuel Mwangi

3

LaunchAgents'taki özellik listeleri de çalışır, ancak hem aracıları hem de kesimleri sudo ile 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 -wgerekli 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 yapamadığı şeyleri yapabilirler.


3

Google'cılar özellikle Başlatma çalıştırmak isteyen için Ajan root bir Lansmanı Koşma ile Daemon , bu yapılabilir:

  • LaunchAgent'ınızı içinde oluşturun ~/Library/LaunchAgents
  • Başvurunuzu sudo, ProgramArgumentsmülkünüzdeki mülk aracılığıyla gerçekleştirin
  • NOPASSWDUygulamanız için seçeneği ayarlayın ./etc/resolvers.d

Daha fazla ayrıntı için, buna ve bu cevaba bakınız .


2

LaunchControl Yosemite'de benim için acısız yaptı. Servis oluşturmanıza veya düzenlemenize yardımcı olacak hoş 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 Shell betiğini 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" dan "Özel argv" ye 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 SSS çok iyi.

Lütfen yazıcınızı, problemin çözümü için atabilecekleri adımları dahil etmek üzere düzenleyebilir misiniz?
Cfinley
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.