Как перезапустить фоновое задание, которое не удалось выполнить из-за «сломанного канала»

Как перезапустить фоновое задание, которое не удалось выполнить из-за «сломанного канала»

У меня был запущен фоновый процесс, команда которого начинается с "nohup nice". Поскольку обычно это занимает 20 часов, я запустил его ночью. Однако сегодня утром я получил сообщение "write failed: broken pipe", вероятно, потому, что сервер закрывает соединения, которые простаивают слишком долго. Когда я снова вошел на сервер, при вводе команды "jobs" задания не было. Как мне перезапустить программу с того места, где она остановилась, а не запускать ее с самого начала?

решение1

Это зависит от того, где вы увидели это сообщение. Если вы подключаетесь к серверу через ssh и видите это на локальном терминале, все в порядке. Процесс, вероятно, все еще успешно выполняется на удаленном сервере. Вы не увидите его, jobsпотому что jobsпоказывает только процессы, запущенные в текущем сеансе оболочки. Если вы переподключились к серверу, вы начали новый сеанс, поэтому это jobsне поможет. Попробуйте запустить, ps aux | grep ProcessNameчтобы проверить, выполняется ли он все еще.

Если вы увидели это сообщение в nohup.outили в вашем выходном файле, вы не можете. Нет, если только это не процесс, который каким-то образом поддерживает возобновление. Ошибка означает, что процесс был остановлен. Поскольку он был остановлен, он исчез, нет способа вернуть его обратно.

Если бы это было, например, чтение входного файла и создание выходных данных, вы могли бы попытаться выяснить, когда это остановилось, и запустить его снова, передав только оставшиеся строки в качестве входных данных. Однако нет трюка, который мог бы заставить его волшебным образом перезапуститься, поскольку нет записи о том, когда это остановилось.

Связанный контент