Modifiqué el org.postfix.master.plist predeterminado de postfix para que se ejecute como un demonio , de modo que pueda enviarme un correo electrónico cada vez que un usuario local reciba un correo.
Por defecto:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.postfix.master</string>
<key>Program</key>
<string>/usr/libexec/postfix/master</string>
<key>ProgramArguments</key>
<array>
<string>master</string>
<string>-e</string>
<string>60</string>
</array>
<key>QueueDirectories</key>
<array>
<string>/var/spool/postfix/maildrop</string>
</array>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
Modificado:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>org.postfix.master</string>
<key>Program</key>
<string>/usr/libexec/postfix/master</string>
<key>ProgramArguments</key>
<array>
<string>master</string>
</array>
<key>QueueDirectories</key>
<array>
<string>/var/spool/postfix/maildrop</string>
</array>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
Sin embargo, este archivo está bajo /System/Library/LaunchDaemons/
, por lo que tuve que desactivar SIP temporalmente para modificar el archivo. Leí que después de la próxima actualización del sistema operativo, todos mis cambios desaparecerán debido a SIP. ¿Qué puedo hacer para que esto sea permanente? ¿Puedo poner mi Launch Daemon /Library/LaunchDaemons
como segundo?
Todavía no he tenido que lidiar con esto "de verdad", pero creo que la mejor solución es:
Label
valor para que coincida. Si no cambia esto, es probable que launchd se confunda entre este y el original.sudo launchctl unload -w /System/Library/LaunchDaemons/org.postfix.master.plist
(lo -w
hace permanente).sudo launchctl load /Library/LaunchDaemons/local.org.postfix.master.plist
, (o simplemente reinicie).Por cierto, si simplemente deshabilita SIP y modifica el archivo existente, no necesariamente será revertido por una actualización del sistema operativo. Pero podría , y tendría que verificar después de cada actualización (incluidas las actualizaciones de seguridad, etc.), lo cual es una molestia.
Tuve un problema similar, y lo anterior no lo solucionó. Estoy compartiendo mi comida para llevar, si alguna vez puede ahorrarle algo de tiempo a alguien (luché durante algunas horas con eso)
Tldr: tuve que ejecutar mi plist como root
En mi caso, el plist cargaba correctamente desde la Terminal:
sudo launchctl load /Library/LaunchAgents/com.name.of.the.plist
Pero no lo hizo después de reiniciar la computadora. Por cierto, puedes verificar si tu plist está cargado con lo siguiente:
sudo launchctl list | grep "my.plist"
Vi exactamente el error al agregar registros:
<key>StandardErrorPath</key>
<string>/Users/XXX/err.log</string>
<key>StandardOutPath</key>
<string>/Users/XXX/out.log</string>
Reveló este mensaje de error:
sysadminctl[807:9587] sysadminctl should be run as root, or in interactive mode!
Realmente pensé que mi secuencia de comandos ya se estaba ejecutando como root (debido a que estaba en /Library/LaunchAgents/
), pero no fue así, ¡y mi secuencia de comandos estaba teniendo un problema de permiso!
Ahora, para ejecutar el plist como root:
/Library/LaunchAgents/
a/Library/LaunchDaemons/
UserName
clave de la siguiente manera:<key>UserName</key>
<string>root</string>
En mi caso funcionó bien!
benjaminvonderweiden
Label
valor es realmente importante. De lo contrario, el daemon no se iniciará.