Как мне добавить nohup в набор команд bash?

Скопируйте файл / etc / init.d / скелет и переименуйте его в /etc/init.d/your-service . После этого отредактируйте этот файл, чтобы создать новые скрипты. комментарии в этом файле используются Yast, чтобы описать, на каких уровнях выполнения должен быть запуск / остановка.

Затем сценарий отобразится в YaST → Система → Системные службы (уровень выполнения), вы можете включить его с помощью chkconfig для создания соответствующих ссылок

chkconfig --set your-service on

, вы также можете активировать его на некоторых уровнях выполнения, используя

chkconfig --level 35 someservice on

для деактивации службы вы можете использовать

chkconfig --set your-service off

2
29.12.2016, 15:52
1 ответ

У вас есть несколько вариантов, все из которых сохраняют ваше требование завершения сеанса переднего плана в конце ( что вы делаете с kill $ WB ).

  1. Если возможно, используйте tmux (или экран). Это наиболее очевидное решение для вашего варианта использования: отключение на вашем конце просто вызовет отсоединение сеанса tmux, поэтому введенные вами команды не будут остановлены; после этого вы даже можете повторно подключиться к этому сеансу, если хотите проверить его вывод (вместо tail -f nohup.out ). Вам даже не понадобится трюк kill $ WB , поскольку каждая команда выполняется на переднем плане, поэтому простого exit будет достаточно. Резюме : ssh в ваш VPS -> выполнить tmux -> введите перечисленные вами команды (без WB = $$; (, ) & в конце и заменив kill $ WB простым exit ) -> отключите, отсоедините и повторно подключите по мере необходимости
  2. Если вы не можете или наденьте Не хочу использовать tmux, поместите свои команды в файл. Проблема здесь в основном в том, что nohup не может выполнять сгруппированные команды (концепция подоболочки является исключительной для bash, вы не можете выполнить ее с помощью nohup), поэтому вы можете поместить свой код, например, в / opt / myscript.sh file:

     #! / bin / bash 
     
     # Вы передадите PID оболочки переднего плана в качестве ее первого аргумента 
    WB = $ 1 {{1 }} 
    sleep 2h; 
    echo "Удаление PMA и выход"; 
    phpdismod mcrypt mbstring; 
    apt-get purge phpmyadmin -y; 
    перезапуск службы apache2; 
    sed -i 's / Include \ / etc \ / phpmyadmin \ /apache.conf/ / g' / etc / apache2 /apache2.conf;
    kill $ WB {{ 1}} 

    Затем вы можете выполнить его с помощью nohup /opt/myscript.sh $$ &

  3. Если вы не можете или не хотите помещать их в файл, просто выполните их вот так : nohup bash -c "... здесь ваши команды ...; kill $$" & . $$ здесь по-прежнему будет относиться к внешней оболочке переднего плана, поскольку она подставляется перед выполнением в качестве аргумента bash -c .

  4. Поскольку ваш сценарий начинается с двухчасового сна, вы можете рассмотреть программу at . Вы можете выполнить сейчас + 2 часа , а затем ввести команды, которые вы хотите выполнить, через 2 часа после этого (с точностью до 1 минуты). После того, как вы наберете все нужные вам команды, вы можете выйти из "оболочки" с помощью Ctrl + D и проверить с помощью atq , что ваша последовательность команд запланирована для выполнения.

  5. Вы также можете выполнить свой сценарий как heredoc. Это в основном то же самое, что и вариант 3, но вместо того, чтобы указывать ваши команды в качестве аргумента -c , вы передаете их на стандартный ввод bash. Просто имейте в виду, что если ваш сценарий ожидает аргументы, вы должны указать их во время вызова bash, например:

     nohup bash -s - firstArgument secondArgument << 'EOF' & 
     .... paste здесь ваш код ..... 
    EOF 
     
3
27.01.2020, 22:03

Теги

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