crontab запускает несколько процессов Java каждые 5 минут?

Это просто означает, что родитель демона (pid 677) начал новую сессию, вилку, а ребёнок (pid 678) унаследовал эту сессию и продолжил работу.

Это могло произойти, если какой-нибудь оберточный сценарий использовался для даемонизации чего-нибудь (и по какой-то причине не выполнил свою цель - возможно, для обработки перезагрузок), или просто потому, что процесс выбрал вилку снова перед тем, как войти в устойчивое состояние.

Я бы сказал, что процесс является фактически демоном, если PPID равен 1 и у него нет управляющего терминала. Ограничение session id/process group id часто также верно, но на самом деле не требуется для демонического поведения.

0
25.03.2015, 02:08
4 ответа

gmail позволит использовать их SMTP-сервер для отправки электронных писем с помощью другого адреса электронной почты . Необходимо настроить устройства для входа на сервер Google с использованием полномочий gmail, но после этого можно отправлять из других учетных записей.

Вы можете настроить свой собственный сервер с помощью постфикса или подобного на RPi, но тогда вам придется отправлять и получать SMTP, и все головные боли в безопасности, которые с этим связаны.

-121--150529-

Ваше первое решение работает, просто требуется немного времени (5-10 секунд в моем тесте на Кали), чтобы перейти от «(неполного)» к отсутствию записей.

Предположительно, он находится в каком-то переходном состоянии на пути к удалению.

-121--32680-

РР объяснил логику лучше, чем могу.

Я предлагаю удалить cd/home/poppetapp & & и просто использовать следующее для получения желаемого результата.

*/5 * * * * pgrep -f test_java_10.jar || /home/poppetapp/test_java.sh > /home/poppetapp/test_java.out
0
28.01.2020, 02:51

При достаточно большом значении 'undolevel' Vim должен иметь возможность отменить изменения за весь день. Если вы выйдете из Vim в промежутке, вам также потребуется включить постоянную отмену , установив параметр 'undofile' .

Vim захватывает не просто последовательный список команд для отмены, но фактически дерево всех изменений. Он также имеет несколько команд вокруг отмены (cp. : help undo-branches ); вернуться в штат в начале дня,

:earlier 12h

является хорошим кандидатом.

Существуют также плагины, такие как Gundo и undotree.vim , которые визуализируют дерево отмены и позволяют перемещаться по нему.

Если навигация по дереву отмены звучит слишком громоздко (например, потому что вы вносите много изменений в течение дня), вы также можете добавить облегченную систему управления версиями (в дополнение к Subversion), как мой плагин writebackup , и явно создать резервную копию в определенное время.

-121--52468-

Преимущество чего-то вроде | | в том, что он позволяет запускать что-то на основе кода возврата. Например, если левая сторона имеет значение false , то она оценивает правую сторону, но в противном случае это не беспокоит.

Вот проблема, хотя - посмотрите на страницу человека для pgrep:

Утилиты pgrep и pkill возвращают одно из следующих значений при выходе: 0 Один или несколько процессов были сопоставлены. 1 Процессы не были сопоставлены.

Так что на самом деле, это 0 и, таким образом, false , когда он соответствует - так что фактически он запустит ваш процесс java только если он уже запущен:).

Переключите | | на & & и получите требуемый результат. Хотя на самом деле, я бы предложил поместить это в сценарий, чтобы будущим читателям не пришлось выяснять то же самое.

Я бы предложил - процесс grepping по своей сути немного ненадежен. Вы можете сделать это через pid или lockfile.

-121--229727-

Я думаю, что это может быть проблема группировки. Я заменил ваш вызов pgrep простым true или false :

  • Если процесс не выполняется, pgrep не будет выполнен:

     $ false | | echo cd & & echo run
    CD
    управляемый
    
  • Если процесс выполняется, pgrep будет успешным:

     $ true | | echo cd & & echo run
    управляемый
    

    В этом случае вы бы не хотели, чтобы все было исполнено! При выполнении true | | (echo cd & & echo run) ничего не отображается, что мы хотим.

Я предлагаю попробовать pgrep -f test_java_10.jar | | (cd/home/poppetapp & &/ home/poppetapp/test_java.sh >/ home/poppetapp/test_java.out) .

1
28.01.2020, 02:51

Ряд способов сделать это.

Вероятно, сценарий диспетчеризации под SunManager более или менее хорош, чем любой другой. Просто проверьте, включен или выключен eth0, а затем отключите или включите wifi соответствующим образом, используя nmcli (интерфейс командной строки с сетевым менеджером). При выполнении поиска будет найден следующий сценарий (См., например, http://crunchbang.org/forums/viewtopic.php?id=26282 ):

#!/bin/bash

if [ "$1" = "eth0" ]; then
    case "$2" in
        up)
            nmcli nm wifi off
            ;;
        down)
            nmcli nm wifi on
            ;;
    esac
fi

Назовите его тем, что вы будете, но/ etc/NetworkManager/dispatcher.d/99-wlan кажетесь подходящим, и убедитесь, что он является исполняемым.

Некоторая приятная документация по StartManager по адресу: https://wiki.archlinux.org/index.php/NetworkManager . мужские страницы - еще один хороший источник.

Кроме того, в качестве альтернативы можно рассмотреть возможность подключения к сети, а также использования скриптов в/etc/network/interfaces.

-121--150552-

При достаточно большом значении 'undolevel' Vim должен иметь возможность отменить изменения за весь день. Если вы выйдете из Vim в промежутке, вам также потребуется включить постоянную отмену , установив параметр 'undofile' .

Vim захватывает не просто последовательный список команд для отмены, но фактически дерево всех изменений. Также имеет несколько команд вокруг undo (cp. : help undo-branches ); вернуться в штат в начале дня,

:earlier 12h

- хороший кандидат.

Существуют также плагины, такие как Gundo и undotree.vim , которые визуализируют дерево отмены и позволяют перемещаться по нему.

Если навигация по дереву отмены звучит слишком громоздко (например, потому что вы вносите много изменений в течение дня), вы также можете добавить облегченную систему управления версиями (в дополнение к Subversion), как мой подключаемый модуль writebackup , и явно создать резервную копию в определенное время.

-121--52468-

Преимущество чего-то вроде | | в том, что он позволяет запускать что-то на основе кода возврата. Например, если левая сторона имеет значение false , то она оценивает правую сторону, но в противном случае это не беспокоит.

Вот проблема, хотя - посмотрите на страницу человека для pgrep:

Утилиты pgrep и pkill возвращают одно из следующих значений при выходе: 0 Один или несколько процессов были сопоставлены. 1 Процессы не были сопоставлены.

Так что на самом деле, это 0 и, таким образом, false , когда он соответствует - так что фактически он запустит ваш процесс java только если он уже запущен:).

Переключите | | на & & и получите требуемый результат. Хотя на самом деле, я бы предложил поместить это в сценарий, чтобы будущим читателям не пришлось выяснять то же самое.

Я бы предложил - процесс grepping по своей сути немного ненадежен. Вы можете сделать это через pid или lockfile.

0
28.01.2020, 02:51

Чтобы избежать проблем с приоритетом операторов ||и &&, просто перенесите свою логику в скрипт:

#!/bin/sh -e

if ! pgrep -f test_java_10.jar >&2; then
    cd "$HOME"
    /usr/home/java -jar./test_java_10.jar
fi

Затем вызывайте этот скрипт из вашего crontab каждые пять минут:

*/5 * * * * "$HOME/test_java.sh"
0
28.01.2020, 02:51

Теги

Похожие вопросы