Давайте подумаем о том, что делает демон. Он сидит и ждет событий, а затем отвечает на них. Это отличается от задания cron, которое просто выполняется по расписанию.
Очень легко сделать что-то, что будет работать, подождать, пока что-то произойдет, сделать что-нибудь, когда это произойдет, а затем продолжать ждать, пока что-то случится снова. Все, что вам действительно нужно, это обертка для существующего сценария оболочки. Оболочка должна распознавать условия события и запускать скрипт, который вы в противном случае запускали бы в cron.
Оболочка может быть такой же простой, как скрипт оболочки, который запускается заданием cron по специальной строке "@reboot" (подробности man 5 crontab
). Запустите скрипт-обертку напрямую или внутри GNU Screen, чтобы вы могли присоединиться к нему в будущем и посмотреть, как он работает (если вы не включили обработку ошибок). Чтобы быть умным, следует также избегать запуска существующего сценария более одного раза за раз (то есть дать ему файл блокировки), хотя вы уже выполняете это в своем сценарии ksh, выше.
Вместо бесконечной петли Джекдо со сном, выше, вы хотите распознать событие , которое запустит ваш скрипт. Например, должен ли он выполняться, когда файл с именем "somefile" загружается с использованием vsftpd? Тогда:
#!/bin/sh
tail -F /var/log/vsftpd.log | while read line; do
case "$line" in
*UPLOAD*/somefile",*)
/path/to/abc.sh
;;
esac
done
Это хакерское решение на полпути, которое не включает в себя функции запуска / остановки, но оно поможет вам.
Действительно, эта обертка должна заботиться о блокировке, чтобы избежать многократного запуска abc.sh, и должна поддерживать свой собственный файл pid, чтобы он мог быть убит обработчиком в /etc/init.d/ (Linux) или / usr /local/etc/rc.d/ (FreeBSD).