Есть такая софтина для управления конфигурациями по имени Puppet. Он умеет стягивать конфиги, скрипты, расписания и многое другое с центрального сервера. В общем, удобно — можно управлять кучей серверов из одной точки.
Так вот, этот Паппет запускается у меня по расписанию, раз в N минут. И всё бы хорошо, но иногда клиентский процесс подвисает, и нужно его ручками прибить и запустить заново. Надоело. За минуту написал скрипт-костыль, который делает ps ax | grep puppet | awk '{print $1}' | xargs kill, то есть ищет запущенные процессы, которые содержат puppet в имени, и их убивает в расчёте на то, что если с предыдущего запуска процесс продолжает выполняться, то он висит. Потом этот же скрипт запускает агентский процесс заново.
Проверяю — работает. Отлично. Через тот же Паппет меняю в кроне запуск самого Паппета на запуск этого костыля, он разъезжается по всем серверам — и…
И понимаю, что скрипт я, естественно, назвал puppet_launcher. Он послушно находит себя в списке процессов, так как содержит слово puppet в имени, и убивается, так и не запустив непосредственно агента.
Дальше — руками по всем серверам…