Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Алиас для /etc/init.d/… restart

Устал я писать каждый раз строки вида «sudo /etc/init.d/nginx restart» для перезапуска многочисленных серверов, поэтому сделал себе короткий алиас. Я бы не упомянул об этом, если бы не два отличия.

Во-первых, алиас я сделал не через команду «alias», так как не знаю как для неё подставить параметр не в конец, а в произвольное место (если это вообще возможно), во-вторых, я сделал добавление для автодополнения в bash (если кто-нибудь знает ссылку на хороший мануал по этой теме, напишите в комментариях, пожалуйста).

Вот что получилось (у меня это в .bashrc):

rst () { command sudo /etc/init.d/$@ restart; }

function _rst() {
    local cur

    cur=${COMP_WORDS[COMP_CWORD]}
    if [ 1 -eq ${COMP_CWORD} ]; then
        COMPREPLY=( $(compgen -f -- /etc/init.d/$cur | xargs -n1 basename -- ) )
    else
        COMPREPLY=()
    fi
}

complete -F _rst rst
16 комментариев
indeec17 2011

отвечу не в кассу, т. к. у меня винда =) перезапускаю примерно следующим образом, ибо просто командой перечитывать конфиги не хочет. Команда «nr» либо клик =) ибо тоже не люблю много печатать
@echo off
set _=C:\nginx
pskill nginx.exe
ping -n 2 127.0.0.1 >nul
rem обязательно в текущей папке запускать, по полному пути запуск лажает
%_:~0,2%
cd %_%
start nginx.exe

Евгений Степанищев (bolknote.ru) 2011

Комментарий для indeec17:

Если винда, можно использовать хороший PowerShell, а не плохой cmd :)

indeec17 2011

можно, разве что лень его ставить, т. к. у меня и так автоматизировано. например, перезапуск апача в случае его тупежа, перезапуск nginx в случае изменения конфига и т. д.
не силён в линуксах, но если cron может следить за изменением файлов как и виндовый nncron, то перезапуск nginx можно сделать слежкой за спецфайлом в шаре (smb). Если серверов для перезапуска 1000 шт., можно каждому на шару положить файл со специальным пустым (или нет) файлом, чтобы следящий за ним cron сделал что-нить и затем перезапуск nginx. Шары — как пример, можно дофига способов клиент-серверных придумать.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для indeec17:

Я не один на сервере, поэтому перезапускать надо вручную.

hshhhhh.name 2011

Комментарий для Евгения Степанищева:

*sudo /etc/init.d/nginx restart*

ну кто так делает?
ps ax | grep master
kill -HUP <pid>

ну. можно конечно и в одну строку записать, но лень и все такое.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для hshhhhh.name:

Это же ужас какой-то!

Во-первых, не надо так делать, есть специальные скрипты, которые прилетают вместе с пакетом.
Во-вторых, почему не killall -HUP nginx, если уж на то пошло.

agonych (agonych.livejournal.com) 2011

А почему restart а не force-reload

Александр Карпинский 2011

Как бы sudo service nginx reload
1) service быстрее набирается чем череда из слешей.
2) reload — перечитывает конфиг без потери клиентов. В случае ошибки откатывается на старый.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для agonych.livejournal.com:

А почему restart а не force-reload

Во-первых, не один nginx надо рестартовать, а restart есть у всех
Во-вторых, restart и force-reload у nginx алиасы

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Александр Карпинский:

Как бы sudo service nginx reload

Когда-то давно, когда я переходил с Fedora на Ubuntu, я поискал команду service. То ли не нашёл, то ли она работала как-то не так, но я запомнил, что такой команды нет. Значит есть, буду знать.

reload — перечитывает конфиг без потери клиентов. В случае ошибки откатывается на старый.

Я знаю что такое reload, но меня это не заботит, на продакшне никто сервер руками не рестартует (кроме исключительных случаев), а на девелопменте мне нужен как раз restart, чтобы была одна команда на всё — измнение конфига, установку новой или альтернативной версии, сброс при утечках и т. д.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Александр Карпинский:

Не дописал, а уже отправил.

Кроме того, не один nginx надо рестартить («многочисленные сервера» в заметке это не «многочисленные nginx»), вот пример:

bolk-dev ~ $ service php5-fastcgi-init reload
Usage: /etc/init.d/php5-fastcgi-init {start|stop|restart|force-reload}

deerua 2011

Комментарий для Евгения Степанищева:

А для Z SHELL этот скриптик покатит?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для deerua:

Для zsh? Понятия не имею. Я его видел в последний раз году так в 1998-99.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Александр Карпинский:

Как бы sudo service nginx reload

Ага, мне наши рассказали, что это в Lucid появилось. А мы так давно на него перешли (ещё есть машины, которые на Hardy).

Zubchick (openid.yandex.ru/Zubchick/) 2011

а я пишу так:
ctr-R + nix res + enter + enter

Евгений Степанищев (bolknote.ru) 2011

Комментарий для openid.yandex.ru/Zubchick/:

Я тоже так иногда делаю, только у меня в истории чего только не попадается с такими словами. Так что иногда приходится плевать и писать руками. Гораздо надёжнее иметь короткую команду.