Как запустить python скрипт на ubuntu чтобы он не отключался?
Вариантов много, вот то, что придумал с ходу:

1. Запустить скрипт в bash с nohup.
2. Запускать скрипт в сессии tmux и просто детачиться из неё. Сессия продолжит работать. Это всё тот же ручной запуск скрипта.
3. Создать сервис systemd.
4. Запускать в фоне с помощью supervisor.

Если нужно, чтобы скрипт работал и запускался без участия человека, то варианты 3 и 4.
Systemd конечно оч. хорошо, но и Supervisor прекрасно справляется с такими задачами.

Я, например, и многие мои собратья по Проксе-Пепсика (на Python3) запускаем её, как раз через Supervisor, что весьма удобно.

Всё просто.
Сначала устанавливаете его:
sudo apt install supervisor

Теперь - ОБЯЗАТЕЛЬНО! - создаём конфигурационный файл:
sudo sh -c 'echo_supervisord_conf > /etc/supervisor/supervisord.conf'
Если этого не сделать, то в папке /etc/supervisor будет лежать очень урезанный и бедный на настройки supervisord.conf файл и многие параметры придётся дописывать руками!

Судите сами:
- это урезанный файл после установки Supervisor
Урезанный supervisord.conf; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf