• BASH. Как получить PID запускаемого процесса, чтобы его потом убить?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    переменная $$ - текущий PID
    переменная $! - PID последнего дочернего процесса.

    echo "$$" > file.pid

    Для других программ
    ./run_other_program &
    echo $!>other_program.pid
    Ответ написан
    5 комментариев
  • Как привязать домен к ip адресу с портом?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Как пить дать нужно для сайта. Ответ: на этом хосте на стандартных портах (80, 443) повесить reverse proxy (nginx, можно apache с mod_proxy, но лучше nginx), который трафик по этому конкретному домену будет прокидывать на самого себя с другим портом.
    Ответ написан
    Комментировать
  • Суть функции IsNotExist()?

    @ghostiam
    На Go писатель, серверов пинатель.
    os.IsNotExist(err) проверяет ошибку, что это ошибка отсутствия файла, можно проверять ошибку не только Stat, но и ошибку при открытии файла.

    Stat может вернуть не только ошибку не найденного файла, но и ошибку ввода/вывода, таймаут и ещё букет ошибок, для этого и используется доп проверка ошибки os.IsNotExist(err)

    Не верное заключение по поводу примера кода, верно так:
    _, err := os.Stat(filename)
    if err != nil {
        if os.IsNotExist(err) {
            fmt.Println("file does not exist") // это_true
        } else {
        // другая ошибка  - это_false
        }
    } else {
        // тут файл существует 
    }
    Ответ написан
  • Прозрачный squid + microtik. Как настроить перенаправление траффика?

    @andrey71
    админю и учу C#, ASP.NET Core
    Доброго времени суток. Встала передо мной аналогичная задача и погуглив у меня всё получилось.
    Работает без тормозов.
    По сути, я банально консолидирую множественные решения в своём ответе.

    Дано: mikrotik + squid с одной сетевой картой.

    В микротик добавил правила:
    /ip firewall mangle
    
    chain=prerouting action=mark-routing new-routing-mark=SQUID passthrough=yes protocol=tcp 
          src-address=!192.168.адрес.проки dst-port=80 log=no log-prefix=""


    и

    /ip route
    add comment=FOR_SQUID_TEST distance=1 gateway=192.168.адрес.проки routing-mark=SQUID


    Далее на убунте был установлен сквид.
    его конфиг практически пустой конфиг, т.к. нет нужды ничего ограничивать:

    http_port 3128 intercept
    acl mylocalnet src all
    http_access allow mylocalnet


    так же в файле /etc/sysctl.conf разрешил пересылку пакетов:
    net.ipv4.ip_forward = 1

    и добавил правило в фаервол

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 j DNAT --to 192.168.адрес.прокси:3128
    Ответ написан
    Комментировать
  • SQUID FOR WINDOWS Как настроить кеширование assets.uchi.ru?

    @402d Автор вопроса
    начинал с бейсика на УКНЦ в 1988
    Разобрался.

    В конфиге расскоментируем строку
    cache_dir aufs /cygdrive/d/squidcachedir/cache 3000 16 256
    и правим путь на диск C
    cache_dir aufs /cygdrive/c/squidcachedir 3000 16 256

    Далее
    1) остановить службу
    2) squid -z -F
    3) запустить службу.

    Нужен был ключ форсе и служба должна была в момент пересоздания не работать

    Добавил такие правила. Просьба покритиковать.

    refresh_pattern -i \.css$ 43200 100% 43200 override-lastmod override-expire
    refresh_pattern -i \.gif$ 43200 100% 43200 override-lastmod override-expire
    refresh_pattern -i \.png$ 43200 100% 43200 override-lastmod override-expire
    refresh_pattern -i \.jpg$ 43200 100% 43200 override-lastmod override-expire
    refresh_pattern -i \.svg$ 43200 100% 43200 override-lastmod override-expire
    refresh_pattern -i \.woff2$ 43200 100% 43200 override-lastmod override-expire
    refresh_pattern -i \.jpeg$ 43200 100% 43200 override-lastmod override-expire

    js файлы лучше не кешировать . Похоже они там динамически создаются.
    Ответ написан
    Комментировать
  • Не понимаю паттерн MVC. Что почитать/посмотреть?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    MVC под веб реализовать крайне сложно. Всё что вы там видели, либо вообще далеки от правды, либо жалкая пародия: https://habr.com/ru/post/321050/ Этот самый MVP ныне принято называть "MVC с пассивной моделью" из-за подобных постов/видосиков/проч от тех, кто не понимает о чём говорит. Слишком сильно это заблуждение вошло в массу. В жизни же используется немного модифицированный MVP (Laravel, Symfony, Yii, etc) и ADR (Laravel).

    Вот максимально приближённый вариант классического MVC (или MVC с активными моделями): https://github.com/SerafimArts/real-mvc-app
    Ответ написан
    Комментировать
  • Почему существует 2 версии PHP (Non Thread Safe и Thread Safe)?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Здесь ответ на ваш вопрос.

    Для тех, кто не знает английский.

    Версию сервера нужно выбирать в зависимости от того, как вы интегрируете PHP c веб-сервером.
    Например, когда вы используете mod_php, у вас модуль и PHP всегда загружены в память и каждый запрос обрабатывается в отдельном потоке. Из-за этого mod_php работает быстрее, чем CGI. В данном случае нужно использовать потоко-безопасную реализацию (thread-safe) поскольку каждый поток имеет доступ к памяти другого потока.

    Когда вы работаете с IIS, у вас PHP запускается ввиде отдельного процесса через CGI и в таком случае потоко-безопасность не имеет смысла, поскольку у вас 1 процесс и фактически 1 поток созданный этим же процессом. Операционная система изолирует память процессов по умолчанию.

    В случае модели с FastCGI, потокобезопасность также не имеет смысла, поскольку тотже PHP-FPM держит несколько отдельных процессов PHP в памяти, но не потоков.
    Ответ написан
    Комментировать
  • На каком движке создать онлайн кинотеатр?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    Судя по гитхабу CinemaPress работал на плеере moonwalk, которые недавно закончились, так что не будет у вас никакого самообновляемого сайта теперь с онлайн фильмами.
    А вместе с ним скоро домрут 80-90% фильмо сайтов, типа того который вы хотите сделать, но опоздали слегка.

    Ведь мне нужен уникальный проект.

    В чем он будет уникальный? В CinemaPress с плеером moonwalk который автоматически наполняется и таких сайтов сотни/тысячи с разным доменом?)

    Как же хорошо что их убили наконец-то.

    Так что теперь по старинке - хочешь сайт с пиратскими фильмами будь добр захости сам в нидерландах.
    Либо перезаливай по мере забанивания на "бесплатные" видеохосты в виде ВК/одноклассников/гугл диска.
    А то расслабились совсем "сделать онлайн кинотеатр" это поставить DLE с автозаполнением и всё.
    Это вообще далеко не самая главная часть онлайн кинотеатров.

    P.S. https://vc.ru/tribuna/63984-rasskaz-o-tom-kak-ya-s...
    вас прям много таких уникальных
    Ответ написан
    Комментировать
  • Что выбрать: Syncthing vs nextCloud vs Seafile vs OwnCloud vs Другой сервис?

    fdroid
    @fdroid
    press any key
    mike153: пробовал все варианты. Nextcloud - это форк Owncloud. По сути, одно и то же, хоть и NC считается более продвинутым и вообще вся опенсорсная тусовка туда ушла. Поэтому пишу о нём. Всё исключительно на правах IMHO. Плюсы:
    - Самый главный - это работа с файлами именно в файловом варианте. То есть, если предположить, что "всё упало", вы можете подключить диск с рухнувшего сервера к любому линуксу и вытащить инфу из /var/www или где она там у вас храниться будет. Также можно подключать внешние хранилища, то есть, предположим, есть у вас на сервере папка с фильмами и музыкой - их можно просто подключить в NC.
    - CardDAV, CalDAV из коробки.
    Минусы:
    - Тормозит всегда, рандомно, в любой момент времени. Независимо от того Apache или Nginx, MySQL или MariaDB, тормозит на любом софте.
    - Интерфейс - УГ, ШГ

    Теперь о Seafile. Плюсы:
    - Турбореактивный просто. Работает очень быстро.
    - Интерфейс очень приятный.
    - Продвинутое версионирование.
    - Умеет открывать docx, odt, xlsx и т.д. без дополнительного софта. Но без редактирования. Если нужно редактирование - нужен отдельный Document Server от Collabora или Onlyoffice.
    - PRO-версия бесплатна для 3-х пользователей, но смысла особого нет, т.к. enterprise-фишки заключаются в 1. полнотекстовому поиску по документам с помощью elasticsearch, у которого просто чудовищное потребление ресурсов 2. двух-факторной авторизации 3. и что-то там ещё, не особо нужное дома
    - Есть клиенты для всех основных платформ
    - Устанавливать можно как вручную по мануалу на сайте, так и воспользовавшись установочным скриптом, который сам всё сделает.
    Минусы:
    - Файлы хранятся в собственном формате, как это правильно называется? - на уровне блоков, что ли. Доступ к инфе только через веб-интерфейс, WebDAV, ну и приложения для синхронизации. То есть, вся информация в Seafile на диске представляет просто кучу мала из папок и файлов, которые нельзя так просто взять и использовать - нужен ещё дамп базы данных. То есть, в случае проблем с системой, достать информацию будет затруднительно. Но выход есть - seaf-cli - это безгуёвый клиент для синхронизации. Смысл в том, что на сервере, на котором крутится Seafile, дополнительно можно установить seaf-cli, натравить его на директорию, и он в эту самую директорию будет складывать синхронизированную копию инфы основной базы Seafile, причём в виде нормальных файлов, которые можно расшаривать как угодно, бэкапить и т.д. Минус решения с seaf-cli в том, что нужно вдвое больше дискового пространства для хранения инфы.
    - Ну и как следствие такой организации файлов - невозможность подключить внешние хранилища, в отличие от тёплого лампового Nextcloud.

    В общем, лично я остановился на Seafile.
    Ответ написан
    Комментировать
  • Структура проекта на Vue.JS. Обязательно ли использовать Babel, Webpack?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что за Babel, Webpack, зачем их использовать и обязательно ли это?


    babel - транслятор ES6+ (текущий стандарт JS + возможность добавлять драфты стандартов) в javascript (ES5). То есть возможность использовать фишки нового стандарта в старых браузерах. С одной стороны использовать его новичку было бы полезно, так как многие вещи из новых стандартов сильно упрощают код. С другой стороны есть риск по неопытности сделать плохо. Но этот риск как бы есть всегда.

    webpack - бандлер. Он собирает модули в бандлы (то есть не только JS, но и картинки может в стили заинлайнить а те что сильно большие рядом положить ну и все такое). При этом может разрулить много чего и с ним реально проще жить.

    Модули? Почему нельзя вручную создать директории и файлы?


    Модули никакого отношения к структуре директорий не имеют. Это нужно для инкапсуляции и изоляции. Примите как аксиому что все глобальное это плохо и стоит избегать оного. Модули локализуют все в локальные области видимости. Ну и управлять зависимостями становится проще.

    Гугл. Ищущему да воздастся. Все гуглить по отдельности. И что там в ES6 нового, и про babel, и про webpack (ну тут можно еще отдельно webpack + babel).
    Ответ написан
    2 комментария
  • Сколько ещё можно добавить ОЗУ?

    Punkie
    @Punkie
    Сколько ещё можно добавить ОЗУ?

    5a6b09c97c546316551614.png
    Следовательно, еще 4.

    2. И какой ssd можно в него воткнуть ?

    Любой формфактора 2.5".
    Ответ написан
    Комментировать
  • Развертывание web приложения на Go?

    mirrr
    @mirrr
    Программист и просто хороший человек
    Опишу свой способ, который перекликается со способом Алексей . Все это делается одним bash-скриптом, но распишу примерный алгоритм.

    1) Создаем юзера под которым будет работать приложение и переключаемся на него:
    useradd -s /bin/bash <имя_пользователя>
    su <имя_пользователя>


    2) Генерируем новый ключ для деплоя
    ssh-keygen -t rsa -C "<имя_пользователя>@<домен_сервиса>"
    cat ~/.ssh/id_rsa.pub

    Например, в gitlab добавляем этот ключ Project>Settings>Deploy Key

    3) Клонируем приложение и собираем приложение
    cd ~
    git clone ssh://______.git app 
    # здесь не буду расписывать, можно устанавливать через go get и т.д. способы отличаются
    # для go get нужно прописать $GOPATH в .bash_profile


    4) Создаем systemd service
    exit #выходим из-под юзера
    nano /etc/systemd/system/<service_name>.service

    Вписываем:
    [Unit]
    Description=<description>
    
    [Service]
    Restart=always
    RestartSec=10
    EnvironmentFile=-/<service_path>/env
    WorkingDirectory=/<service_path>/appDir
    ExecStart=/<service_path>/appDir/appName
    LimitNOFILE=524576
    LimitNPROC=524576
    User=<user>
    Group=<userGroup>
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=<service_name>
    
    
    [Install]
    WantedBy=multi-user.target


    5) Запускаем сервис и ставим в автозагрузку:

    systemctl start <имя_сервиса>
    systemctl enable <имя_сервиса>


    Посмотреть статус:

    systemctl status <имя_сервиса>

    6) Разрешаем просмотр логов и перезапуск сервиса под созданным пользователем
    Добавляем в /etc/sudoers строчки:

    Defaults:<имя_пользователя> !authenticate
    <имя_пользователя> ALL=/usr/bin/systemctl restart <имя_сервиса>, /usr/bin/systemctl stop <имя_сервиса>, /usr/bin/systemctl start <имя_сервиса>, /usr/bin/journalctl


    Теперь эти операции не будут требовать пароля:
    sudo journalctl -f  -u <имя_сервиса> 
    sudo systemctl stop <имя_сервиса>
    sudo systemctl start <имя_сервиса>
    sudo systemctl restart <имя_сервиса>


    7) настраиваем виртуальный хост nginx для проксирования на порт приложения, если требуется:
    server {
        listen 80;
        server_name site.ru;
    
        client_max_body_size 256m;
        access_log  /var/log/nginx-site-acc;
        error_log /var/log/nginx-site-err;
        log_not_found off;
    
        location ^~ / {
            proxy_pass http://localhost:<порт_приложения>;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_buffer_size 16k;
            proxy_buffers 32 16k;
            proxy_connect_timeout 300;
            proxy_send_timeout 300;
            proxy_read_timeout 300;
        }
    
        location ^~ /files {
            alias /home/<имя_пользователя>/app/some_files;
        }
    }
    Ответ написан
    Комментировать
  • Можно ли скомпилировать программу на go для запуска на машине без установленного go?

    @gaxetasok
    1. На разных операционных системах - свои правила.
    2. Когда ты компилируешь, не указывая где будешь использовать - тебе компилирует под ту операционную систему, на которой ты и запускаешь компилятор.
    3. В такой ситуации как у тебя нужно явно указывать на какой операционной системе ты собираешься запускать программу.
    4. Это называется кросс-компиляция. Ищи в интернете по этому слову.
    5. Тебе здорово повезло, что ты имеешь дело с Go, в противном случае пришлось бы иметь дело со специальными dev-истралляциями и/или тулчейнами.
    6. Тебе нужно выставить 2 переменные среды окружения - GOOS=linux и GOARCH=amd64, то есть указать формат создаваемого файла. А затем запускать компилятор.
    Ответ написан
    1 комментарий
  • Windows-сервер перезагружается из-за ошибки BugCheck, что делать?

    devspec
    @devspec Автор вопроса
    Помогло? Отметь решением
    В общем, это жесть какая-то...
    Сегодня получил левел-ап в администрировании Windows )
    Скачал Windows Drivers Kit, с помощью WinDbg и набора символов проанализировал последний дамп.
    Оказалось, что сервер падает из-за открытых портов SMB. Это какая-то новая уязвимость Windows, под которую по-моему еще даже обновление не вышло (или вышло, но мне не пришло). Закрыл порты и удалил SMB1 из набора компонентов Windows - полдня полёт нормальный.
    Подробнее, если кому нужно, можно почитать здесь или здесь. Ситуация довольно нетривиальная (лично для меня), поэтому решил здесь опубликовать результат её решения.
    Ответ написан
    2 комментария
  • Какая книга интересно и чётко расскажет устройство компьютера на физическом уровне?

    Nekto_Habr
    @Nekto_Habr
    Чат дизайнеров: https://t.me/figma_life
    Энциклопедия профессора Фортрана
    Ответ написан
    Комментировать
  • Прокси-сервер для windows сети. На Linux. Что сейчас модно?

    @silverjoe
    Squid настолько банален и затерт до дыр, что найти пару годных статей по его настпойке и интеграции с AD не состаивит никаких усилий. На том же хабре про него есть интересные статьи.
    Ответ написан
    8 комментариев
  • Почему firefox не работает, как, я думаю, он должен работать?

    GoodWin64
    @GoodWin64
    Век живи - век учись.
    А в чем, собсно, вопрос?
    Ответ написан
    Комментировать
  • Как перенять объектно-ориентированное мышление?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Т.е. сложно понимаю, что "засунуть" в один объект, что в другой, что должно быть статическим методом, что приватным и тд.


    Давайте попробуем строить аналогии. Представьте что ваше приложение состоит исключительно из глобальных переменных и функций, которые с ними работают. Я думаю это не сложно представить. В каждый момент времени вам доступна любая переменная.

    То есть по сути наше приложение - один объект. У него внутри вообще все. У этого объекта есть один метод - обработай запрос. Когда внешний мир его вызывает, меняются значения каких-то переменных, вызываются какие-то внутренние "приватные" для внешнего мира функции, и делается работа.

    Теперь задумаемся о декомпозиции всего этого хаоса. Мы находим какую-то задачу, которую выполняет наш код (например какую функцию вызвать для обработки каждого конкретного запроса) и выносим это в отдельный объект. Отправка email-ов - отдельный объект. Весь SQL зашиваем в отдельный объект. Соединение с базой - объект. Пользователи - объекты. Все - объекты.

    И главное, у каждого объекта есть своя область ответственности. UNIX way. Каждый объект делает что-то одно и делает это хорошо. Бывает так что ну... нужно сделать так что бы один объект делал две вещи. НЕ вопрос, мы можем его попросить сделать что-то сложное, а он будет как хороший менеджер тупо делегировать работу другим объектом. То есть он и сложную штуку сделает, и сам не будет знать как она делается.

    А все безхозные функции, которые не пренадлежат никаким объектам (например функции порождающие объекты) можно вынести в статические методы. Главное что бы статичесих переменных у нас небыло (ибо это те же глобальные переменные). И поменьше публичного ибо черт его знает что эти разработчики будут использовать. Причем "те разработчики" это вы завтра.

    Вообщем писав всё время на процедурке, сложно перейти на ооп.


    Просто не думайте что это что-то "принципиально другое". Это та же самая процедурка, просто благодаря классам и объектам, вы можете порезать систему на маленькие модули. Данные будут лежать рядом с процедурами и у вас будет больше контроля за происходящим.

    Вы можете начать погружаться в ООП с того, что разобраться "почему глобальные переменные это плохо", почему "состояние порождает сложность" и что такое эта "сложность" (многие почему-то думают что сложность выражается в написании кода а не в его чтении или поддержке), почему "изоляция" (и как следствие инкапсуляция) - это хорошо. Как это все соотносится с декомпозицией. Что такое "ответственность", что такое зависимости, связанности

    Подскажите, какой проект начать писать (гостевая, блог), или может начать изучать фреймворк.


    Фреймворки универсальны, а значит чистого ООП там быть не может. Во всяком случае нет ни одного фреймворка на котором стоит учиться ООП.

    Есть хорошие упражнения на развитие понимания объектно-ориентированного проектирования. Например вот: https://habrahabr.ru/post/206802/

    Сразу хочу отметить что это крайности. Упражнения же. Они должны ограничивать вас что бы заставлять думать и задавать правильные вопросы.

    Или может подскажите книгу/сайт где пошагово в ооп написан какой-то проект, чтобы быстрее пришло понимание.


    Так вы научитесь делать один конкретный проект а на втором вы уже проиграете. Так дела не делаются. Надо разобраться с причинами появления идеи ООП. Ну то есть что было до. Можно еще с функциональным программированием попробовать разобраться. В PHP оно слабо применимо, но основные идеи очень тесно переплетаются с ООП и познав немного функциональщины ваше ООП будет лучше. Да и если про ООП вы можете найти много булшита, про функциональщину врут мало.
    Ответ написан
    3 комментария
  • Есть ли аналоги бух. программ для своего сервера?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    угу, где-то в Уральских горах живет гномик, отслеживающий забесплатно изменения в бухучете
    Ответ написан
    2 комментария
  • Что с трафиком, помеченным как Android HttpURLConnection?

    @Monty
    Коллега, не будете так любезны рассказать чем дело закончилось?
    Ответ написан
    Комментировать