С недавнего времени озаботился созданием резервных копий того, что есть на диске. Точнее, на диске сервера. Конфигурации, некоторое состояние и тому подобное. Не помню почему, но то, что было - не устроило. Ну и решил написать своё решение, но уже на лиспе. Для запуска внешних программ используется библиотека external-program. Программа do-backup обрабатывает конфигурацию вида:
((:contact
(:to "root")
(:subject "DO-BACKUP robot"))
(:action :7z
(:suffix ".7z")
(:program "7z")
(:argument "a")
(:argument :file)
(:argument :files))
(:action :slapcat
(:program "slapcat"))
(:action :pg_dumpall
(:program "su")
(:argument "-")
(:argument "postgres")
(:argument "-c")
(:argument "pg_dumpall"))
(:backup
(:action :7z)
(:file "/etc/")
(:file "/var/lib/bind/")
(:file "/var/lib/egroupware/")
(:file "/var/lib/ejabberd/")
(:file "/var/lib/ldap/")
(:dynamic-file "/var/backups/ldap-data.ldif" :action :slapcat :saveoutput t)
(:dynamic-file "/var/backups/postgresql/postgre.sql" :action :pg_dumpall :saveoutput t)
(:output-directory "/backups/configuration/" "configuration-~a.7z" 60))
(:backup
(:action :7z)
(:file "/var/lib/projects/")
(:output-directory "/backups/projects/" "projects-~a.7z" 30)))
Секция :backup описывает то, что необходимо будет резервнокопировать (в секциях :file и :dynamic-file), а :action - какие дейтвия необходимо выполнять. В целом, как мне кажется, по конфигурации понятно что должно происходить.
Далее, необходимо запускать задания по расписанию. В целом, мог бы подойти и обычный cron, но в данном случае для обобщения решений на лиспе был использован clon как аналог cron'а. Ну и, конечно же, необходимо демонизировать. Это достигается путём использования пакета sbcl-daemon, являющегося производным от restas-daemon.lisp. Важное отличие - это неиспользование (sb-posix:umask 0), поскольку это порождает файлы с записью для всего мира, что несколько небезопасно по умолчанию. Ну и ещё динамический запуск процедур в зависимости от конфигурации. Конфигурация демона do-backup производится в /etc/do-backup.daemon, где и задаётся периодичность запуска.
В заключении - исходный код проекта. Собранные пакеты, готовые для установки - в lisp-репизотрии для Ubuntu и Debian.