В итоге я поместил сценарий nohup в отдельный сценарий bash.
/usr/local/bin/axttystart
#!/bin/sh
## Intermediate bashscript in order to sudo nohup properly
/usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1
Затем строка sudo'ers, содержащая Cmnd_alias
для AXTOOLTTYSTART
, была изменена на
Cmnd_Alias AXTOOLTTYSTART = /usr/local/bin/axttystart
Обновленный скрипт axopen вместо sudo для строки nohup будет использовать sudo скрипт axttystart
#!/bin/sh
[...]
echo "Starting axtty service.."
$SUDO /usr/local/bin/axttystart
sleep 4
$SUDO /etc/init.d/axtty status
При распространении пакетов рекомендуется сделать их доступными в репозиториях пакетов (либо в ваших собственных, либо в одном из различных репозиториев сообщества ); таким образом, обновления обрабатываются вместе с остальными обновлениями системы. В текущих настольных средах пользователи уведомляются о наличии обновлений, поэтому вы не добавите большую задержку по сравнению с конкретной проверкой в вашем приложении.
Тем не менее, вы можете самостоятельно выполнять обновления. В зависимости от того, как упаковано ваше приложение,может даже не понадобиться закрывать его перед обновлением — среды в стиле Unix -не мешают вам изменять исполняемый файл во время его работы.
Что касается вашего фрагмента установки для Debian и его производных, я бы не стал возиться с gdebi
; apt
может самостоятельно устанавливать локальные пакеты. Загрузите пакет, затем в том же каталоге запустите
sudo apt install./package.deb
Пока вы начинаете путь с ./
, apt
будет использовать загруженный пакет (и разрешать зависимости и т. д. ).
Вы можете сделать то же самое для RPM-систем на базе Fedora -или RHEL -с помощью yum
или dnf
.