Поэтому, как часть сценария запуска для компьютерных лабораторных систем OS X, я запускаю встроенную команду оболочки, называемую systemsetup, для синхронизации системы с сетевым сервером времени. Он работает внутри сценария Perl следующим образом.
#!/usr/bin/perl
system("systemsetup -setusingnetworktime off");
system("systemsetup -setusingnetworktime on");
Если сначала включить его, то он будет обновляться при включении.
Проблема в том, что очень часто эта команда выдает следующую ошибку writeconfig[1841:903] *** -[NSMachPort handlePortMessage:]: dropping incoming DO message because the connection or ports are invalid
, а затем останавливает выполнение оболочки или сценария в зависимости от того, где я ее запускаю.
На практике это происходит на редкость шокирующе - на 500 лабораторных системах, запускающих скрипт ежедневно при загрузке, я замечаю проблему только в одной системе каждые несколько недель. Странно, но на самом деле это очень легко воспроизвести в тестировании.
Итак, я понимаю, что это довольно очевидная ошибка в systemsetup, из-за которой выдается эта ошибка, но я уверен, что есть способ заставить мой скрипт perl изящно его обработать, верно?
Лучшее, что у меня есть на данный момент, это systemsetup -setusingnetworktime off&>/dev/null
, который передает STDOUT и STDERR в /dev/null.
.