Я хочу, чтобы моя служба .Net Linux запускала скрипт оболочки bash, который останавливает свою родительскую службу, пока скрипт продолжается.
Это можно легко сделать в Linux с помощью nohup и &.
Это можно сделать в Windows .net, написав заглушку .exe или скрипт, который запускает постоянный скрипт, затемостанавливает своего родителя.В этом случае заглушка и родительский элемент умирают, но сценарий, запущенный подпрограммой, продолжается.
Однако в .net в Linux это, похоже, не работает.Мое приложение .net может выдавать команду оболочки с nohup, но под-скрипт, который также запускается с nohup и &, и который является предполагаемой фактической работой, не запускается.
заглушка update1.sh
, запускается из приложения .net с
nohup /usr/bin/myservice/update1.sh update.rpm &
Содержит:
trap '' SIGTERM
trap '' SIGINT
nohup /usr/bin/myservice/update2.sh $1 &
update2.sh
содержит
trap '' SIGTERM
trap '' SIGINT
sudo systemctl stop myservice
yum -y localinstall $1
sudo systemctl start myservice
(ловушкипредназначены для предотвращения остановки родительского процесса от остановки ребенка)
Если я запускаю update1.sh из командной строки, в то время как su'd для учетной записи пользователя службы, с nohup и &, он работает нормально.Проблема возникает, когда я запускаю заглушку из приложения .net с той же командной строкой.Похоже, это связано с работой в среде .net управляемого кода.
Есть предложения?
Цель - взять приложение .net, работающее на автоматическом сервере Centos, и позволить ему обновлять и перезапускать себя, используя 'yum -y localinstall' и локальный RPM-файл (нет, он не может идтив удаленный репозиторий).