Посмотрите на Proc :: Daemon - это самое простое, что работает. Из вашего CGI-скрипта выполните CGI-бизнес (получение ввода, возврат ответа браузеру), затем вызовите Proc :: Daemon :: init (), который выполняет форк, демонизирует ваш процесс и делает родительский выход. Затем ваш сценарий (теперь демон) выполняет свои долгосрочные задачи и завершает работу после их завершения.
Вы захотите обновить что-либо (файл, запись в базе данных) во время работы в качестве демона, чтобы последующие вызовы CGI могли проверить, что он сделал (или как он продвигается).