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 stop
für einen Job, der nicht geladen wurde, funktioniert nicht.