
У меня был запущен фоновый процесс, команда которого начинается с "nohup nice". Поскольку обычно это занимает 20 часов, я запустил его ночью. Однако сегодня утром я получил сообщение "write failed: broken pipe", вероятно, потому, что сервер закрывает соединения, которые простаивают слишком долго. Когда я снова вошел на сервер, при вводе команды "jobs" задания не было. Как мне перезапустить программу с того места, где она остановилась, а не запускать ее с самого начала?
решение1
Это зависит от того, где вы увидели это сообщение. Если вы подключаетесь к серверу через ssh и видите это на локальном терминале, все в порядке. Процесс, вероятно, все еще успешно выполняется на удаленном сервере. Вы не увидите его, jobs
потому что jobs
показывает только процессы, запущенные в текущем сеансе оболочки. Если вы переподключились к серверу, вы начали новый сеанс, поэтому это jobs
не поможет. Попробуйте запустить, ps aux | grep ProcessName
чтобы проверить, выполняется ли он все еще.
Если вы увидели это сообщение в nohup.out
или в вашем выходном файле, вы не можете. Нет, если только это не процесс, который каким-то образом поддерживает возобновление. Ошибка означает, что процесс был остановлен. Поскольку он был остановлен, он исчез, нет способа вернуть его обратно.
Если бы это было, например, чтение входного файла и создание выходных данных, вы могли бы попытаться выяснить, когда это остановилось, и запустить его снова, передав только оставшиеся строки в качестве входных данных. Однако нет трюка, который мог бы заставить его волшебным образом перезапуститься, поскольку нет записи о том, когда это остановилось.