Ответы пользователя по тегу Linux
  • Как сделать readinessProbe по тексту файла?

    @MadridianFox
    Web-программист, многостаночник
    Как уже написали в соседнем ответе вы можете обойтись одним только grep, однако ваша ошибка в другом.
    Во-первых, вы используете возможности shell, там где его нет. Пайп это специальная команда, которая есть в sh и bash. А хелсчек exec вызывает программы напрямую.
    Во-вторых, command это массив аргументов запуска. Каждая опция, каждый аргумент должен быть отдельным элементом массива, а вы просто дописали всё во второй элемент и оно распознаётся как один большой аргумент cat.

    Делайте греп и помещайте каждую опцию в отдельный элемент списка.
    Ответ написан
    Комментировать
  • Linux какую файловую систему выбрать?

    @MadridianFox
    Web-программист, многостаночник
    Недавно был пост на хабре по этому поводу:
    https://habr.com/ru/company/kingston_technology/bl...

    Кратко - выбирайте ext4 и не парьтесь, всё уже продумали за вас.
    Ответ написан
    Комментировать
  • Как автоматически запускать проект при падение?

    @MadridianFox
    Web-программист, многостаночник
    Выглядит так, будто вы уже неправильно запускаете ваш проект.
    reboot now это вы хотите прям на уровне операционной системы перезагрузиться? Зачем так радикально?
    Зачем заходить в скрин? Выскажу догадку - yarn start завершается когда вы выходите с сервера, и вы решили запускать его в скрине?

    Ну такое.
    Смотрите. Можно сделать надёжнее
    1) устанавливаете pm2 - менеджер процессов для долгоживущих nodejs приложений
    2) пишете простой как две копейки ecosystem файл
    3) запускаете своё творение не в скрине, и выходите с сервера не опасайсь что оно упадёт

    Далее можно организовать перезапуск приложения. Не сервера.
    Самый простой способ - повесить на этом же сервере на крон скрипт, который будет делать curl -s -o /dev/null -w "%{http_code}". Если ответ этой команды не "200" то выполнять команду pm2 restart myApp

    Кстати, если перебои в работе приложения происходят из-за того что прям процесс падает, то даже никакой крон не понадобится - pm2 сам следит за тем что приложение остановилось, и запускает его снова.
    Ответ написан
    Комментировать
  • Как получить доступ к глобальным переменным в shell script?

    @MadridianFox
    Web-программист, многостаночник
    Это называется Переменные окружения.
    Тут важно как и где вы их задаёте. Посмотреть список переменных окружения в текущем sh процессе можно выполнив команду
    env
    Переменные окружения обычно передаются программам и скриптам которые вы запускаете.
    Если вы хотите задать переменную, чтобы она передалась при запуске программы, её надо экспортировать
    ANDROID_HOME=/home/user/android
    export ANDROID_HOME

    эти строки можно выполнить в терминале и тогда переменная будет существовать в этом терминале до его закрытия. Или можно вставить эти строки в ~/.bashrc чтобы оно выполнялись каждый раз при старте терминала.
    Или, если надо один раз передать переменную скрипту можно указать её при запуске, вот так
    ANDROID_HOME=/home/user/android ./script.sh
    В случае если скрипт запускается не в терминале, а, например через IDE или в CI/CD системе, то надо читать документацию по ней, там скорее всего описано как задать переменные окружения.
    Ответ написан
    2 комментария
  • Как с помощью ps найти основной дочерний процесс?

    @MadridianFox
    Web-программист, многостаночник
    Обычно, проверка на то что программа уже запущена, делается через создание т.н. lock файла.
    Вам нужно в начале работы скрипта проверить - создан ли файл.. ну например /var/www/site/manage.lock
    если да, то завершить программу т.к. уже работает другой процесс,
    если нет - создать такой файл, продолжить выполнение программы, а перед завершением удалить файл.

    Если говорить об определении дочерних процессов, то у ps богатые возможности по фильтрации и форматированию вывода. Получить PID дочерних процессов зная PID родительского можно вот так:
    ps --ppid=1234 -o pid
    Ответ написан
  • Как сделать системный трей под polybar(i3wm)?

    @MadridianFox
    Web-программист, многостаночник
    В конфиге есть отдельные опции под трей.
    Вот то как у меня настроено:
    tray-position = right
    tray-detached = false
    tray-maxsize = 16
    tray-background = ${color.bg}
    tray-offset-x = 0
    tray-offset-y = 0
    tray-padding = 0
    tray-scale = 1.0
    Ответ написан
    Комментировать
  • Какой дистрибутив Linux выбрать для начинающих?

    @MadridianFox
    Web-программист, многостаночник
    Зависит от того чего вы хотите добиться.
    Говорят, что лучше учиться водить на машине с механической коробкой передач, а не с автоматической. Потому что в обратном случае, с механикой у вас будут проблемы.

    Тут может произойти та же ситуация. Убунта - дружелюбный к новичкам дистрибутив. Созданный для того чтобы и домохозяйка смогла его установить и смотреть ютубчик. Если это может домохозяйка, то даст ли это вам новые навыки?

    Тут на самом деле возможны две точки зрения:
    1) надо ставить любой линукс, и пытаться дить с ним. Решая постоянно возникаюзие проблемы вы научитесь... делать ваши повседневные задачи в линуксе, ну и приобретёте понимание некоторых линуксовых вещей.
    2) надо ставить линукс в виртуальной машине. Это позволит вам проводить более радикальные эксперименты, не боясь угробить сам компьютер. Тут можно уже и не ОС для домохозяек ставить.

    Исходя из этого я бы посоветовал вам arch linux. У этого дистирибутива лучшая вики из всех что я видел. Но домохозяйка его уже не установит. Тут надо самостоятельно размечать диск, настраивать монтирование, настраивать сеть и т.д. Благо в вики всё это по шагам расписано.
    Сначала попробуйте его в виртуальной машине. Несколько раз настройте по разному - с разными графическими окрежениями, с разными сетевыми менеджерами и т.д.
    Сохраняйте получившиеся конфиги. Научитесь их переносить.
    Когда почуствуете что уверенно можете воспроизвести полученный результат на новой виртуалке и когда поймёте что вы в состоянии открыть ютубчик, тогда можно помолиться и ставить уже на реальный компьютер.

    После такой подготовки у вас будут навыки чтобы работать с большинством других дистрибутивов.
    Ответ написан
    Комментировать
  • Как средствами php запустить выполнение linux-команды в фоновом режиме?

    @MadridianFox
    Web-программист, многостаночник
    nohup - это команда bash, которая просто указывает самому bash'у что фоновому процессу не надо отправлять сигнал HUP при завершении работы.
    & это тоже фишка bash, позволяющая перевести процесс в фон

    Проблема в том что php это вам не bash и он наверное сам отслеживает состояние запущенного им процесса.

    Попробуйте использовать setsid.
    В отличие от nohup это полноценная программа, которая запускает указанную в качестве аргумента программу в отдельной сессии. Как только целевая программа запущена setsid завершает работу. Это должно "отпустить" php почти моментально.
    Ответ написан
  • Как запустить скрипт python в фоне как демон?

    @MadridianFox
    Web-программист, многостаночник
    Чтобы программа работала "в фоне", она должна либо сама позаботиться о том чтобы не блокировать консоль и не умирать при закрытии баша, либо доверить это специальной программе.

    Как уйти в фон самостоятельно:
    Процессы (работающие программы) имеют идентификаторы и знают кто их запустил, посредством хранения id родительского процесса. Т.о. у нас есть дерево процессов. Родительский процесс может управлять дочерними, и он должен при своём завершении завершать и свои дочерние процессы. Если он этого не сделает, то дочерний процесс сменит родителя на процесс с id = 1, т.е. на init процесс. Поэтому чтобы уйти в фон, ваша программа должна всего лишь остановить её родительский процесс.
    Проблема в том, что родительский процесс для программы, которую вы запускаете в консоли - это сама консоль и нам не надо чтобы она закрылась.
    Поэтому уходящие в фон программы перед остановкой родителя увеличивают уровень вложенности - т.е. запускают свою копию, и эта копия, будучи дочерней для первого процесса программы, убивает уже не баш, а вспомогательный родительский процесс.
    Другой момент - это отвязаться от консоли. Тут всё просто - надо перенаправить stdin, stderr и stdout в файлы.
    Ну и наконец надо позаботиться об управлении демоном, ведь пока что нам не остаётся ничего другого, кроме как посылать ему сигналы командой kill. Чтобы реализовать более понятные команды, надо сделать две вещи:
    1) во время ухода в фон сохранить в файл pid результирующего процесса
    2) написать немного кода в самой программе или во вспомогательном скрипте, который, при вызове его в консоли, будет читать pid из файла и манипулировать процессом.

    Такая функциональность часто выделяется в отдельную библиотеку, можно поискать в документации или на гитхабе.

    Другой вариант - использовать вспомогательные программы.
    С одной стороны у нас есть возможности самого баша - jobs т.е. фоновые процессы, которые однако умирают при закрытии консоли. Чтобы это обойти есть команда disown и программы nohup и setsid.
    Они позволяют так или иначе получить процесс отвязанный от баша. Однако управлять процессом можно будет только сигналами.
    С другой стороны есть менеджеры процессов. Например supervisord или pm2. Это такие программы, которые умеют уходить в фон и умеют, уже будучи демоном, запускать другие программы и управлять ими.

    Ну и наконец всегда есть главный менеджер процессов вашего компьютера/сервера - это система инициализации, которая сейчас почти везде - systemd. Делает то же самое что и обычный менеджер процессов, но ещё и позволяет управлять последовательностью запуска процессов.

    Итог: выбирать способ демонизации процесса необходимо исходя из стабильности его работы. Если это сервер, который должен работать месяцами и запускаться при старте системы - то надо использовать систему инициализации. Так делают Nвеб-сервера, базы данных и всякие капитальные сервисы.
    Если процессы более динамичные и их надо периодически запускать и останавливать, то лучше взять менеджер процессов.
    Если это совсем уж мимолётное желание запустить программу в фоне, пусть поработает а там остановлю, то можно не заморачиваться и отвязать её от баша тем или иным способом.

    Возможность самостоятельно уйти в фон и реализация собственных команд управления процессом нужна только если у вас наполеоновские планы и вы хотите дать пользователям возможность запускать вашу программу на разных ОС.
    Ответ написан
    Комментировать
  • Как контролировать работу скриптов-воркеров? Что лучше Crontab?

    @MadridianFox
    Web-программист, многостаночник
    Когда у вас есть очередь сообщений, вам нужны программы, которые запускаются один раз и в цикле читают и обрабатывают сообщения из очереди. Ну и супервизор над ними, который будет их поднимать если они падают.

    Т.е. ваши сервисы не должны запускаться по крону, а должны постоянно работать.
    Ответ написан
    Комментировать
  • Прога мониторинга ресурсов linux из windows типа Диспетчера задач?

    @MadridianFox
    Web-программист, многостаночник
    ssh + htop
    а вообще мониторинг серверов это очень обширная тема
    Ответ написан
    Комментировать
  • Как правильно запустить сервис внутри docker контейнера?

    @MadridianFox
    Web-программист, многостаночник
    В runserver выполняется команда
    "${YT_DIST}/bin/youtrack.sh" start &
    Амперсанд в конце указывает на то что это надо запустить и отправить в бэкграунд.
    При этом тот факт что в /bin/youtrack.sh передаётся аргумент start говорит о том что это ещё один стартер. Надо посмотреть на его код.
    Ответ написан
    6 комментариев
  • Как сконфигурировать nginx для того чтобы он работал как http прокси?

    @MadridianFox
    Web-программист, многостаночник
    Чтобы nginx проксировал запросы другому серверу надо в папку /etc/nginc/conf.d/ добавить файл с расширением .conf в котором написано:
    server{
      listen 5556
      server_name _;
      location / {
        proxy_pass localhost:5555
      }
    }


    Но если можно сконфигугрировать вашу вещь, которая слушает localhost:5555 чтобы она слушала 0.0.0.0:5555 то она и сама станет доступной из локальной сети.
    Ответ написан
    Комментировать
  • Как проверить права?

    @MadridianFox
    Web-программист, многостаночник
    Так как вы спрашиваете - никак. Вы можете только посмотреть права на файлы (в том числе и исполняемые файлы, которые и являются тем что вы называете командами), и сопоставить их с тем - в каких группах состоит пользователь.
    Ответ написан
    Комментировать
  • Docker самоубиваемый контейнер (ромео и джульета)?

    @MadridianFox
    Web-программист, многостаночник
    Вообще в системах типа доккера придерживаются обратной стратегии - если что-то упало, то это желательно автоматически поднять заново, а все остальные контейнеры должны быть к этому готовы.
    Однако, можно наверное сделать третий контейнер, единственной задачей которого будет проверять статус первого контейнера и останавливать второй если надо.
    Ответ написан
    Комментировать
  • Как ограничить окружение ssh сессии?

    @MadridianFox
    Web-программист, многостаночник
    Можно назначить пользователю shell в котором можно настроить какие именно команды может выполнять пользователь
    Ответ написан
  • Как сконвертировать в utf 8 большой текстовый файл?

    @MadridianFox
    Web-программист, многостаночник
    Сомневаюсь что есть способ конвертировать файл в одну кодировку, когда разные его части имеют разную кодировку.
    И вообще, зачем понадобилось складывать всё в один файл?
    Не легче ли было записывать полученные данные в базу, ато файл на 40Гб...
    Ответ написан
    Комментировать