Выполнение команд при старте 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.









