Ist es möglich, einen Dienst über launchd zu stoppen, wenn der Dienst manuell gestartet wurde?

Ist es möglich, einen Dienst über launchd zu stoppen, wenn der Dienst manuell gestartet wurde?

Ich verwende launchd, um MySQL beim Booten zu starten, es funktioniert einwandfrei. Ich kann den Dienst mit den Befehlen „launchctl unload“ und „launchctl load“ stoppen und starten. Außerdem kann ich den Dienst starten, indem ich den Befehl „mysqld_safe“ in das Terminal eingebe. Aber wenn ich den Dienst mit „launchctl stop“ stoppe und ihn dann mit dem Befehl „mysqld_safe“ starte, kann ich den Dienst nicht mit „launchctl stop“ stoppen. Ist das möglich? Was mache ich hier falsch?

Meine Plist ist:

<?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>mysql.service</string>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/mysql/bin/mysqld_safe</string>
                <string>--defaults-file=/path/to/mysql/my.cnf</string>
                <string>--port=3306</string>
                <string>--socket=/path/to/mysql/tmp/mysql.sock</string>
                <string>--datadir=/path/to/mysql/data</string>
                <string>--log-error=/path/to/mysql/data/mysqld.log</string>
                <string>--pid-file=/path/to/mysql/data/mysqld.pid</string>
       </array>
       <key>RunAtLoad</key>
       <true/>
       <key>KeepAlive</key>
       <false/>
       <key>UserName</key>
       <string>_mysql</string>
       <key>GroupName</key>
       <string>_mysql</string>
    <key>StandardOutPath</key>
    <string>/tmp/mysql_start.out</string>
    <key>StandardErrorPath</key>
    <string>/tmp/mysql_start.err</string>

</dict>
</plist>

Der zum Starten von MySQL über das Terminal verwendete Befehl lautet:

mysqld_safe --defaults-file=/path/to/mysql/my.cnf --port=3306 --socket=/path/to/mysql/tmp/mysql.sock --datadir=/path/to/mysql/data --pid-file=/path/to/mysql/data/mysqld.pid

Antwort1

Dies ist beabsichtigtes Verhalten. Die Ausgabe launchctl stopfür einen Job, der nicht geladen wurde, funktioniert nicht.

verwandte Informationen