Da agosto 2013, utilizzo Mac Mini con OS X versione 10.8.2 come server Web (stack MAMP). Ho alcuni lavori programmati di avvio programmati tramite plist.
Tutto andava bene fino al 3 novembre 2013, domenica. La modifica dell'ora legale in quel giorno ha causato alcuni problemi. Inizialmente pensavamo che il programma di lavoro da eseguire intorno alle 2 del mattino fosse eseguito due volte, ad esempio il lavoro pianificato per l'esecuzione alle 02:45 di mattina alle 01:45 e di nuovo alle 02:45.
Più tardi da un esame dettagliato dei file di registro abbiamo rilevato che non sono solo i lavori tra l'1 e le 2, ma tutti i lavori eseguiti in quel giorno vengono eseguiti due volte, esattamente un'ora prima dell'orario effettivo e dell'ora pianificata. Dal giorno successivo launchd ha iniziato a comportarsi normalmente. Pensavo che launchd avesse la capacità di gestire correttamente le modifiche all'ora legale, come il modo in cui cron lo gestisce, ma con mia sorpresa non sono riuscito a trovare alcuna informazione a riguardo nel manuale di launchd o nei forum di supporto.
Secondo l'ultimo commento in questo thread dal forum di supporto di Apple, devo credere "Il problema giace nel meccanismo Launchd '. Se è così vero che il lancio si sta comportando sulla prossima modifica dell'ora legale, il 9 marzo, dove le 2:00 alle 3:00 verranno saltate è imprevedibile. Qualcuno può suggerire il suo comportamento su una modifica di inizio di ora legale? Come posso fare in modo che gestisca un cambiamento di fine dell'ora legale, in modo che non esegua i lavori due volte? EST 2014 è il fuso orario del server.
Il formato plist che sto usando è:
<?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>report.groups</string>
<key>ProgramArguments</key>
<array>
<string>php</string>
<string>/var/www/mysite/reports/generateReportGroups.php</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>2</integer>
<key>Minute</key>
<integer>45</integer>
</dict>
</dict>
</plist>