Задать вопрос
  • Как правильно рассчитать зарплату программистов?

    opium
    @opium
    Просто люблю качественно работать
    Как минимум надо учитывать часы и от них уже считать зарплату, не приходил полмесяца на работу зп получаешь в два раза меньше. Ну и цена в час должны зависеть от производительности человека.
    Ответ написан
  • Нужна программа "пингатор"

    @v_prom
    такой скрипт можно написать за 3 минуты, зачем программы какие-то искать?
    Ответ написан
    1 комментарий
  • Как при определённом URL отдавать ошибку 404 в nginx

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    location =/someuri { 
    return 404;
    }


    Всё, что после ? - это $args, работать с ними через location нельзя, только через if.

    То есть если вам нужно ограничить доступ к странице /someuri?page=1, то придется делать так:
    location =/someuri { 
    if ($arg_page = 1) { return 404; }
    # или (если вообще искать цифру 1 во всей части ссылки после ? 
    if ($arg ~* 1) {return 404; }
    <здесь вставляем конфигурацию для обработки запроса к /someuri без page=1 или с другими аргументами, например строки про proxy_pass - скорее всего нужно скопировать из location />
    }


    Если подойдет вариант "заблокировать любые запросы с ?page=1", то if ($arg_page = 1) { return 404; } можно вставить прямо в location / { } (перед остальными частями конфига).

    location =/blah, соответственно, нужно ставить для того, чтобы матчить условие на точные uri, а не на /blahтутлюбойтекст
    Ответ написан
    Комментировать
  • Как освоить статистику?

    afiskon
    @afiskon
    www.ozon.ru/context/detail/id/3788042 Без стеба. А вообще только сегодня у одного дяди в блоге прочитал, что он сколько со статистикой работал, начал понимать ее только к 40-ка годам.
    Ответ написан
    1 комментарий
  • Сталкивался ли кто-нибудь с проблемой перезапуска nginx?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Теги: start-stop-daemon, говно.

    Мы эту проблему решали добавлением kill -9 в конце init-скрипта nginx-а, если он сам не сдохнет за сколько то секунд.

    start-stop-daemon возвращает, что всё ок, но в реальности nginx ещё не закрыл все соединения (и не убил процессы).
    Ответ написан
    4 комментария
  • Как лучше организовать удаленный бэкап Linux сервера на удаленный FTP?

    @niocncn Автор вопроса
    Хотелось бы, чтобы был некий вэб-интерфейс. В форму вводишь данные, PHP скрипт сохраняет данные нового сервера в какой то фалик что ли... Думаю, добавить скрипт в cron, а в него подставлять данные сервера. Только, как это лучше сделать? Вот нашел скриптик, который почти полностью удовлетворяет моим требованиям.
    #!/bin/sh
    
    # задаем переменную DATE. Она будет содержать текущую дату.
    
    DATE=`date +%Y-%m-%d_%H-%M-%S`
    
    # задаем переменную содержащую путь к каталогу с бэкапами.
    
    DIR=/home/backups/
    
    # переходим в каталог, где должны храниться бэкапы.
    
    cd $DIR 
    
    # создаем дамп всей базы данных MySQL под пользователем root и сжимаем дамп.
    
    mysqldump -uroot -hlocalhost -p'Пароль рута к БД' -A | gzip -c > mysql_all_db_$DATE.gz
    
    # создаем tar сжатый контейнер. Т.е. архивируем каталог www. В каталоге www хранятся все мои сайты.
    
    tar -czf home_$DATE.tar.gz -P /home/www
    
    # дополнительный параметр -P заперщает архиватору отбрасывать корневой '/'.
    
    # Аналогичным образом архивируем конфигурационные файлы системы, необходимые для быстрого развертывания
    # сервера из бэкапа. 
    # каталог httpd, nginx и т.д. Все файлы будут добавлены в архив с сохранением путей.
    
    tar -czf configs_$DATE.tar.gz -P /etc/openvpn /etc/httpd /etc/nginx /etc/my.cnf /etc/php.ini /etc/logrotate.conf /etc/sysconfig/iptables /etc/sysconfig/clock  /var/spool/cron
    
    # Копируем наши файлы архивов на удаленный сервер с применением
    # <a href="/articles/users/generacziya-klyuchej-dlya-besparolnogo-vxoda.html"><strong>авторизации по ключу</strong></a>.
    # Ключ -i говорит программе scp о том, что для идентификации используется файл "for_scp",
    # который я <a href="/articles/users/generacziya-klyuchej-dlya-besparolnogo-vxoda.html">генерировал</a> ранее.
    
    scp -B -i /root/.ssh/for_scp /home/backups/mysql_all_db_$DATE.gz user@server.ru:~/backups_linux26.ru
    scp -B -i /root/.ssh/for_scp /home/backups/configs_$DATE.tar.gz user@server.ru:~/backups_linux26.ru
    scp -B -i /root/.ssh/for_scp /home/backups/home_$DATE.tar.gz user@server.ru:~/backups_linux26.ru
    
    # удаляем 2 дневные копии архивов
    
    find /home/backups/ -name "*.gz" -mtime 2 -exec rm -f {} \;
    
    
    # инициализируем переменную freemaemory, задав ей значение процентного использования жесткого диска
    
    freemaemory="$(df -h | grep "5.7" | awk '{ print $4 }')";
    
    # grep "5.7" - фильтрую вывод по размеру своего жесткого диска.
    # У Вас будет другое значение. Узнать размер жесткого диска можно командой df -h
    
    
    # Ну и для информирования я отправляю сообщение себе на почту письмо с сообщением, о том, что натворил.
    # Ключ -e позволяет echo использовать спец теги, такие как \n (перенос строки) в данном примере.
    
    
    
    echo -e "Создание резервной копии сервера linux26.ru успешно завершено "`date`"\n\nСозданы следующие архивы:\nmysql_all_db_"$DATE".gz - Дамп базы данных\nhome_"$DATE".tar.gz - Архив web директории\nconfigs_"$DATE".tar.gz - Архив основных конфигурационных файлов системы.\n\nАрхивы отправлены на удаленный сервер.\n\n2-дневные архивы удалены.\n\nЗанято "$freemaemory" дискового пространства" | mail -s "Backup on linux26.ru complate" mail@domain.com


    Взято с linux26.ru

    Только здесь для одного сервера, а мне нужно сохранять данные нескольких.
    Ответ написан
    4 комментария
  • Как упростить код сигнала в Django?

    Tiendil
    @Tiendil
    Разработчик ПО.
    Напишите декоратор, который принимает список моделей, а внутри оборачивает функцию в @receiver для каждой из них.

    Примерно так.

    def my_receiver(models):
    
        def decorator(func):
            for model in models:
                func = receiver(pre_save, sender=model)(func)
            return func
    
        return decorator
    
    @my_receiver(models=[Model1, Model2, Model3])
    def recalculate_data(instance, **kwargs):
        pass
    Ответ написан
    1 комментарий
  • Можно ли устроиться с годом опыта на позицию Java-разработчика в Москве?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Надувайте щеки. Не говорите "Сколько я могу получать ?" ... говорите "я хочу получать ..." .
    Ответ написан
    Комментировать
  • Какие самые перспективные It отрасли?

    Идите в ... менеджеры.
    "Уверенные знания бизнес процессов в IT. Практики нет НИКАКОЙ. Так что можно считать что знаний нет вообще." выучите 3 понятия business critical, itil, kpi и можно сразу CIO.
    Там больше всего платят.
    Ответ написан
    Комментировать
  • Бэды в начале диска

    "Хочу эти первые 10% диска оставить в неразмеченной области, а винду поставить туда, где бэдов нет." не надо так делать, пристрелите этот диск.
    Ответ написан
    4 комментария
  • Как обстоят дела с "Роскомнадзором" на западе?

    inlanger
    @inlanger
    Django программист
    Черных списков нет как таковых. Могут только закрывать отдельные сайты(через бан домена после судебного решения) за стандартные проблемы с законом - ДП, пропаганда тероризма, авторские права. Просто неугодные правительствам сайты не закрывают, или закрывают очень редко. Список нарушений более конкретный, более предсказуемое получение проблем. То есть, за фразу Херкель Муй сайт не закроют, в отличии от России, где за похожие фразы попасть в черный список намного проще.
    Ответ написан
    Комментировать
  • Почему "load average" не соответствует загрузке процессора?

    begemot_sun
    @begemot_sun
    Программист в душе.
    habrahabr.ru/post/216827

    А если словами:
    загрузка cpu и load average это немного разные вещи. LA показывает насколько быстро система может реагировать на внешние воздействия. LA также учитывает внутренние блокировки ОС (в частности работу с дисками и др устройствами, во время которых процессор фактически может простаивать)
    Ответ написан
    2 комментария
  • Авторизация на сайте с помощью Steam OpenID

    @Perzh Автор вопроса
    Использовал openid по примеру api.yandex.ru/openid/doc/dg/reference/python.xml
    Ответ написан
    Комментировать
  • Выполнение скрипта раз в 5 секунд Linux

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Вообще для этого есть snaked.

    Но если уж городить костыли, то:
    #!/bin/bash
    while :; do sleep 5; flock -n /tmp/lock1 -c /var/script.sh & done


    Эта конструкция будет запускать скрипт примерно каждые 5.04 секунды (помимо пяти секунд ещё будет тратиться время на вызов sleep и execve скрипта). При том само время работы скрипта уже не будет влиять на "каждые 5 секунд". Flock здесь нужен на тот случай, если скрипт "залипнет" - чтобы не плодить много запущенных копий скрипта в системе. Если скрипт ходит куда-то наружу или в базу - обязательно используйте flock.

    Дальше нужно обеспечить надежный запуск самого цикла. Тут уже на помощь придет cron (вместе с flock). Добавляйте в /etc/crontab такую строку:
    * * * * * root flock -n /tmp/lock2 -c /path/to/script2

    Каждую минуту крон будет пытаться запустить вторую копию цикла, если lock2 занят - то запускать не будет.
    Можно, конечно, просто добавить скрипт цикла в /etc/rc.local, но если он сдохнет - то уже потом не запустится.
    Ответ написан
    1 комментарий
  • Как организовать защиту от парсинга сайта?

    opium
    @opium
    Просто люблю качественно работать
    Кому надо тот и ручками спарсит и этим все сказано.
    Ответ написан
    2 комментария
  • Где найти бесплатные пиктограммы?

    Ответ написан
    Комментировать
  • Как сделать автоматический ребут сервера?

    merryjane
    @merryjane
    Системный администратор
    Если под сбоем понимается kernel panic, то можно добавить в /etc/sysctl.conf строку:
    kernel.panic = 3
    тогда после kernel panic система автоматом будет перезагружена через 3 секунды.

    В остальных же случаях надо каждый сервис/демон мониторить отдельно и уже на этот мониторинг вешать какой-либо обработчик.
    Ответ написан
    2 комментария
  • Как отсортировать набор массив строк в Python?

    crazyzubr
    @crazyzubr
    Python backend-developer
    score_list = [u'Иванов 4 4 3', u'Петров 5 3 4']
    score_list.sort(key=lambda x: int(x.split(' ')[2]))
    Ответ написан
    3 комментария
  • Как сформировать url в таком виде?

    @malerix
    Посмотрите исходный код функции urlencode:
    hg.python.org/cpython/file/3.4/Lib/urllib/parse.py#l735
    Вам надо либо передать некий объект, у которого есть метод items(), либо подавать на вход не словарь, а список кортежей:
    def sortFunction(items):
        # переставляем элементы в списке items нужным образом
        # ...
        # и возвращаем результат
        return new_items
    new_query = urllib.parse.urlencode(sortFunction(query.items()),True)
    Ответ написан
    Комментировать
  • Как увеличить время жизни батареи на Ubuntu 14.04 LTS?

    karabanov
    @karabanov Куратор тега Linux
    Системный администратор
    Почитать документацию: help.ubuntu.ru/wiki/laptop_mode
    Ответ написан
    Комментировать