Как запустить долгий и трудоемкий процесс в фоновом режиме?

в slacko или puppy linux используйте инструмент гамма-калибровки в настройках экрана -100 +100

настройка/настройка щенка/графический экран открыть гамма-калибровку монитора

Мне пришлось сделать это при использовании телевизора в качестве монитора, чтобы смягчить яркость

но теперь все получилось правильно, единственная проблема, с которой я столкнулся, это разрешение экрана с использованием телевизора, пришлось согласиться на 1040

2
12.02.2021, 12:03
3 ответа

Вы можете попробовать запустить процесс в фоновом режиме с самого начала.

$ nohup mysqldump -u magento2_user -p magento2_db > magento2_db-20201110.sql &

nohupдает иммунитет к зависаниям. означает, что после закрытия вашего терминала или сеанса ssh процесс продолжится в фоновом режиме. И добавив &в команду, вы говорите, что оболочка запускает ее в фоновом режиме.

Если вы хотите отслеживать любые ошибки, которые могут возникнуть при выполнении команды, вы также можете добавить это

$ nohup mysqldump -u magento2_user -p magento2_db > magento2_db-20201110.sql 2>error.log & 

2>error.logозначает, что stderrвашего запущенного процесса будет перенаправлен в файл error.log.

1
18.03.2021, 22:30

можно установить терминальный мультиплексор, например tmux ?

вы заходите на сервер:

ssh user@srv

Затем запустите tmux:

tmux new -s main

когда вы открываете другое соединение с удаленным сервером, ваш сеанс tmux все еще существует:

tmux -a t main

РЕДАКТИРОВАТЬ

Я попробовал это, и это работает:

cat.foo.sh

#!/bin/bash
while [ 1 ]; do echo "OK"; sleep 120; done;

chmod +x.foo.sh
trap './foo.sh &' exit

# exit from ssh session
exit

Теперь снова войдите в систему:

ssh user@srv
ps -U $USER -o cmd,pid | grep "foo"
/bin/bash./foo.sh           3099

существенно trap команда вызова сценария при получении сигнала выхода. Конечно, вам нужно поместить команду mysqldump в сценарий, который будет выполняться.

1
18.03.2021, 22:30

tmux (или screen )действительно хорошее решение, но для него нужен дополнительный пакет.

Использование nohup(, предложенное Panki ), вероятно, является лучшим решением в отношении переносимости в мире *nix. Однако Ubuntu 16 поставлялась с systemd, поэтому вы могли использоватьsystemd-runдля запуска команды:

systemd-run --unit=my_backup --remain-after-exit mysqldump --single-transaction --add-drop-table -h <host> -u <user> -p <db_name> -r magento2_db-20201110.sql

Затем вы можете получить доступ к состоянию и выводам с помощью обычной команды systemd:

journalctl -b -u my_backup
systemctl status my_backup

Вы даже можете легко ограничить ресурсы, которые использует ваша резервная копия, с помощью дополнительных параметров запуска systemd -, см. man 1 systemd -run .

Некоторые пояснения:

  • --remain-after-exitнеобходим для того, чтобы мой _backup.service лежал без дела даже после завершения mysqldump, чтобы сверяться со статусом сервиса и журналом (через journalctl)
  • --unitпозволяет назвать сервис, запущенный systemd по вашему желанию -run
  • Я использовал параметр mysqldump -r, чтобы избежать перенаправления стандартного вывода.

Использование systemd -run для запуска любой команды позволяет закрыть удаленный доступ по ssh без завершения команды.

3
18.03.2021, 22:30

Теги

Похожие вопросы