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>
.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.
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
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.
Ö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:
~/Library/LaunchAgents
içinde oluşturunSudo
ile, plistinizde ProgramArguments
özelliği ile çalıştırınNOPASSWD
seçeneğini /etc/resolvers.d
olarak ayarlayınLaunchControl 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