Ich habe den folgenden Befehl launchctl als .plist-Datei. Es wird geladen und ist einmal täglich ausgeführt, muss aber als Root ausgeführt werden, und ich bin nicht sicher, wie ich das überprüfen kann.
Auch dieser cron-Job legt im Grunde CDs in ein Verzeichnis ab und führt einen Befehl aus. Ich bin sicher, dass launchd eine bessere Möglichkeit bietet, das Verzeichnis anzugeben, in dem der Befehl ausgeführt werden soll.
Woher weiß ich, dass es als root ausgeführt wird und gibt es eine bessere Möglichkeit, dies zu schreiben?
launchdführt Daemons ( /Library/LaunchDaemonsoder /System/Library/LaunchDaemons) als root aus und führt sie unabhängig davon aus, ob Benutzer angemeldet sind oder nicht. Startagenten ( /Library/LaunchAgents/oder ~/Library/LaunchAgents/) werden ausgeführt, wenn ein Benutzer als dieser Benutzer angemeldet ist. Sie können setuid nicht verwenden, um den Benutzer zu ändern, der das Skript auf Daemons ausführt.
Da Sie es hinzufügen /Library/LaunchDaemonsmöchten, sollten Sie sicherstellen, dass Sie es launchdmit Administratorrechten laden (z. B. sudo launchctl load -w /Library/LaunchDaemons/com.apple.samplelaunchdscript.plist).
Schauen Sie sich man launchdfür weitere Informationen.
Vielen Dank. Das war genau das, wonach ich gesucht hatte, um das eigentliche Problem zu beantworten. Das Skript befindet sich in / Library / LaunchDaemons und wurde daher bereits als root ausgeführt.
Emmanuel Mwangi vor 15 Jahren
0
Eine neue Frage: Wird `launchctl` für die Installation eines Daemons benötigt? Ich meine, reicht es nicht aus, die plist-Datei in den entsprechenden Pfad zu kopieren?
Claudix vor 10 Jahren
0
@Claudix: Das stimmt. Das Kopieren der launchd-Konfiguration an Ort und Stelle reicht nicht aus - Sie müssen sie trotzdem "einschalten" (launchctl load)
Chealion vor 10 Jahren
0
4
hanleyp
Haben Sie es mit einem der Launchd-Editoren versucht?
Lingon (aufgegeben, funktioniert aber vermutlich bei Leopard und Snow Leopard)
Um sicherzustellen, dass es als root ausgeführt wird, bin ich mir ziemlich sicher, dass launchd die Programme als root ausführen wird. Denken Sie immer daran, mit chmod den Besitz des Skripts an root zu übergeben? Auf diese Weise wird es nur ausgeführt, wenn es als root ausgeführt wird. Sie müssen dann überprüfen, ob es ausgeführt wird.
sudo chown root:admin script_to_run_by_launchd
Ich habe Lingon benutzt, um dieses Skript zu schreiben. Und ich kann bestätigen, dass es in Leopard gut funktioniert.
Emmanuel Mwangi vor 15 Jahren
0
3
user495470
Eigenschaftslisten in LaunchAgents funktionieren auch, aber Sie müssen sowohl Agenten als auch Daemons mit sudo laden:
Wenn die plist keinen deaktivierten Schlüssel hat, wird dieser standardmäßig beim nächsten Anmelden oder Neustart geladen und -wist nicht erforderlich.
Ein Daemon ist ein Programm, das als Teil des Gesamtsystems im Hintergrund ausgeführt wird (dh es ist nicht an einen bestimmten Benutzer gebunden). Ein Daemon kann keine GUI anzeigen. Insbesondere ist es nicht zulässig, eine Verbindung zum Fensterserver herzustellen.
[...]
Ein Agent ist ein Prozess, der für einen bestimmten Benutzer im Hintergrund ausgeführt wird. Agenten sind nützlich, weil sie Dinge tun können, die Daemons nicht ausführen können, z. B. verlässlicher Zugriff auf das Home-Verzeichnis des Benutzers oder eine Verbindung zum Fensterserver.
3
Cory Klein
Für Googler, die gezielt einen Launch Agent mit Root-Privilegien als Launch Daemon ausführen möchten, können Sie Folgendes tun:
Erstellen Sie Ihren LaunchAgent in ~/Library/LaunchAgents
Führen Sie Ihre Anwendung mit sudoüber die ProgramArgumentsEigenschaft in Ihrer Liste aus
Stellen Sie die NOPASSWDOption für Ihre Anwendung in ein/etc/resolvers.d
Weitere Informationen finden Sie in dieser und in dieser Antwort.
2
Jose Leon
LaunchControl made it painless for me in Yosemite. It has a nice drag-n-drop GUI to help you create or edit services. It was surprising to see all the services running that I did not know about.
Steps
Start LaunchControl
Top-left change to GlobalDeamons and enter your admin password
File->New
Under label, give it a unique name. Convention is "com.company.appname"
Under Program to run use the Unix Shell script or whatever command you prefer WITHOUT arguments
If your app requires arguments the change the dropdown field from "Default argv" to "Custom argv"
now provide the argument you would normal as you would run it from the actual command line.
Run at Load is optional, you decide.
From the right-side, drag and drop StartInterval and set the interval you want. The FAQ under Help menu is very good.
Können Sie Ihren Beitrag bitte so bearbeiten, dass er die Schritte enthält, die der Fragesteller unternehmen kann, um das Problem zu lösen?
Cfinley vor 9 Jahren
0