Как правильно запустить скрипт из запущенного скрипта в Ubuntu? - PullRequest
0 голосов
/ 04 апреля 2020

Предположим, у вас на панели есть стартер, который запускает скрипт с именем foo. sh в режиме терминала.

foo. sh, чем запускает другой скрипт с именем bar. sh в фоновом режиме.

Я сталкиваюсь с проблемами:

Первый: имя записанного файла от бара. sh отличается.

Второй и главный: бар. sh скрипт не зависит и d ie, когда терминал закрыт.

Я проверял это на старом 16.04. machine.

foo. sh

#!/bin/bash

#read an user input
read -r -t 60 -p ":" foo
echo "$foo"

#call bar script
/home/$USER/bar.sh "10" "$foo" & disown

#show if bar.sh was started
echo $?

#sleep a short time to see the echo's
sleep 3

bar. sh

#!/bin/bash

#sleep some time
[[ -n "$1" ]] && sleep $1

#then write user input to file called output
echo "$2 - sleept $1 seconds" >> /home/$USER/output

Если время для сна в foo больше, чем в bar, вывод файл написан но называется выходным? (с символом? в конце).

Но если время в баре больше, то бар убивается, когда foo завершает работу, а терминал закрывается.

Любая идея, как правильно настроить a фоновый экземпляр бара. sh? Другой терминал, который остается открытым, не является для меня решением. THX!

1 Ответ

0 голосов
/ 05 апреля 2020

Этот ответ приходит от ученика по Ask Ubuntu :

"nohup" означает "No Hungup". Как следует из названия, он будет продолжать выполнять команду, не вешая трубку, даже если сеанс отключен. Он используется для запуска команд на удаленном сервере, выполнение которых может занять много времени (резервное копирование БД и др. c).

Обычно журналы сценария (если таковые имеются) хранятся в ~ / nohup .out файл. Но вы можете выбрать захват журналов, добавляя или заменяя журналы старого содержимого новым. ">" Один знак «больше» заменит старые журналы новыми. ">>" double больше знака добавит журналы в конец файла.

Я использую этот формат ниже, чтобы запустить то же самое в crontab. В этом случае я заменяю старые логи. /path/to/script_folder/script_name.sh> /path/to/script_folder/logs/script_name.log 2> & 1

...