_ __ ___ _ __ ___ | |__ _ _ _ __ / _| ___ ___ ( _ ) | '_ \ / _ \| '_ \| | | | '_ \ | |_ / _ \ / _ \ / _ \/\ | | | | (_) | | | | |_| | |_) || _| (_) | (_) | | (_> < |_| |_|\___/|_| |_|\__,_| .__(_)_| \___/ \___/ \___/\/ |_| nohup.out, but on the internet. pipe anything into it: $ ./train.sh 2>&1 | curl -sT - nohup.foo nohup: ignoring input and appending output to 'https://nohup.foo/k3x9q2m8pzt4' then watch it from anywhere: browser https://nohup.foo/k3x9q2m8pzt4 terminal curl nohup.foo/k3x9q2m8pzt4 follows live, like tail -f once curl 'nohup.foo/k3x9q2m8pzt4?once' just what's there so far status curl nohup.foo/k3x9q2m8pzt4/status JSON: running, exited, exit code raw https://out.nohup.foo/k3x9q2m8pzt4 plain text, even in a browser want exit codes, notifications and hangup immunity? use nf: $ curl -fsSL https://nohup.foo/nf -o ~/.local/bin/nf && chmod +x ~/.local/bin/nf $ nf ./train.sh --epochs 10 logs expire 24 hours after the process exits. 16 MB per job. links are unguessable, not secret. don't pipe passwords.