Выполнение команд при старте FreeBSD (автозагрузка)
Следующим этапом после начала использование tmpfs во FreeBSD, о котором я писал в предыдущей статье, стала настройка работающих на сервере приложений под использование выделенного из оперативной памяти раздела /tmp. Как оказалось, очень многие из них в своей работе для создания временных файлов требуют по умолчанию альтернативное размещение. Одним из таких приложений является http-сервер nginx. |
По умолчанию во FreeBSD nginx хранит свои временные файлы в структуре каталогов, расположенной по пути /var/tmp
:
# ls -Al /var/tmp | grep nginx drwxr-xr-x 7 www www 512 1 июл 2014 nginx ls -Al /var/tmp/nginx/ total 20 drwx------ 2 www www 512 4 май 18:05 client_body_temp drwx------ 2 www www 512 1 июл 2014 fastcgi_temp drwx------ 2 www www 512 1 июл 2014 proxy_temp drwx------ 2 www www 512 1 июл 2014 scgi_temp drwx------ 2 www www 512 1 июл 2014 uwsgi_temp
Для того, чтобы задать альтернативное (наш раздел tmpfs в точке /tmp) размещение каталогов http-сервера nginx, используемых им для временных файлов, в его конфигурационном файле /usr/local/etc/nginx/nginx.conf
, в секции http
следует прописать следующие строки:
# nano -w /usr/local/etc/nginx/nginx.conf user www www; http { ... client_body_temp_path /tmp/nginx/client_body_temp; fastcgi_temp_path /tmp/nginx/fastcgi_temp; proxy_temp_path /tmp/nginx/proxy_temp; scgi_temp_path /tmp/nginx/scgi_temp; uwsgi_temp_path /tmp/nginx/uwsgi_temp; ... }
Но, как известно, при перезагрузке вся информация, хранящаяся на tmpfs разделе /tmp, удаляется. Следовательно, необходимо в момент загрузки, перед стартом http-сервера, выполнить команды создания необходимого для работы nginx дерева каталогов. И дабы не проделывать это каждый раз вручную после перезагрузки сервера, поместить файл с набором этих команд в автозагрузку, чтобы он исполнялся до момента старта http-сервера nginx.
Для этого в домашнем каталоге суперпользователя root создадим файл nginxtmp
, в котором мы пропишем команды на создание требуемого дерева каталогов и сделаем его исполняемым:
# nano -w /root/nginxtmp #!/usr/local/bin/bash SHELL=/usr/local/bin/bash PATH=/bin:/usr/sbin mkdir /tmp/nginx mkdir /tmp/nginx/client_body_temp mkdir /tmp/nginx/fastcgi_temp mkdir /tmp/nginx/proxy_temp mkdir /tmp/nginx/scgi_temp mkdir /tmp/nginx/uwsgi_temp chown -R www:www /tmp/nginx # chmod +x /root/nginxtmp
Теперь, внимательным образом изучив раздел HandBook Practical rc.d scripting in BSD, составляем свой загрузочный скрипт nginxtmp
, вызывающий наш набор команд из /root/nginxtmp
, который поместим в /usr/local/etc/rc.d
:
# nano -w /usr/local/etc/rc.d/nginxtmp #!/bin/sh # # PROVIDE: nginxtmp # REQUIRE: LOGIN cleanvar # BEFORE: nginx # KEYWORD: shutdown . /etc/rc.subr name=“nginxtmp” rcvar=nginxtmp_enable command=”/root/nginxtmp” load_rc_config $name run_rc_command “$1”
Данный стартовый скрипт при загрузке сервера FreeBSD перед запуском http-сервера nginx при наличии разрешения его запуска в /etc/rc.conf
выполнит набор команд из файла по пути /root/nginxtmp
.
Нам осталось только занести в /etc/rc.conf
строку nginxtmp_enable="YES"
, разрешающую запуск скрипта /usr/local/etc/rc.d/nginxtmp
:
# echo 'nginxtmp_enable="YES"' >> /etc/rc.conf
Подобным образом вы сможете добавлять в автозагрузку FreeBSD свои команды и скрипты.
__________________
Материал с описанием основ написания скриптов rc.d на русском: Основы написания rc.d скриптов в BSD.