2016-07-26 2 views
1

Я быстро и плохо написал сценарий Node.Js без какой-либо обработки ошибок, которая выполняет задание и, в конце концов, сбой при возникновении ошибки. Небрежно, но эффективно.NodeJs: поддерживать скрипт, выполняющийся в течение заданного времени?

Чтобы он работал, я могу использовать npm навсегда и перезапустить его навсегда. Fancy.

Теперь предположим, что я хочу, чтобы он работал 12 часов (с некоторым модулем/кодом, чтобы перезапустить его после сбоя), а затем полностью прекратить работу.

Любой простой способ достижения такого поведения?

+1

"Небрежное, но эффективный". Это проблема. Я читал это как быстро, но бесполезно. – undefined

+0

;-) @ Vohuman: Я прошу не согласиться. Сценарий - любительский бот только для личного использования. Когда он падает, это только мешает мне, и не так много. Авария не влияет на ее эффективность вообще, если она перезапускается немедленно навсегда. Я все еще его разрабатываю и изучаю, как правильно использовать Node в этом процессе, а редкая обработка ошибок остается до конца. Кроме того, вы можете удалить введение (предназначенное только для смеха), вопрос все еще стоит :-) –

ответ

3

Если вы хотите, чтобы процесс node.js прекращался через 12 часов, вы можете просто установить таймер на 12 часов и позвонить process.exit().

setTimeout(function() { 
    process.exit(0); 
}, 1000 * 60 * 60 * 12); 

Если вы хотите использовать систему, как всегда, но вы оба хотите, чтобы остановить программу в течение 12 часов и не хотите навсегда перезапустить его, то вы можете просто запустить задание Хрон, запланированное на 12 часов после этого, чтобы выполнить forever stop /somepath/yourscript.js.


P.S. Нет никакого способа, чтобы система, которая терпит неудачу сама по себе, часто бывает «неосторожной, но эффективной». Это может быстро развиваться, но оно также свободно и опасно и никогда не является эффективным способом кодирования в долгосрочной перспективе. Я предлагаю вам начать удаление всего technical debt, который вы испекли в свой код.

Мое любимое высказывание от бегущих команд развития в течение многих лет было несколько риторическим вопросом: «Почему в первый раз не хватает времени, чтобы сделать это правильно в первый раз, но всегда достаточно времени, чтобы сделать это, чтобы все исправить».

+0

Полный ответ с различными решениями и советами против небрежности. Благодарю. Хотя, если я добавлю: «Я - любительский учебный узел, который недавно понял, как работает асинхронное программирование, я продолжаю совершенствовать предыдущий код при создании моего проекта, и моя главная проблема в жизни заключается в том, что я никогда ничего не делаю, потому что хочу, чтобы все, что я делаю, будь совершенным », продолжаете ли вы читать лекции о том, что я сказал? ;-) Этот пост - это своего рода терапия для меня! Приветствия! –

+0

@ KLôN - Ну, пока вы на нем, вы можете прочитать о [Минимальный жизнеспособный продукт] (https://en.wikipedia.org/wiki/Minimum_viable_product), но нигде в нем не говорится, что ваш код должен быть плохой спроектированы и полны ошибок. Если вы просто учитесь, очевидно, вам нужно учиться, когда вы идете, но очень важная часть обучения - это научиться писать надежный, стабильный код, который обрабатывает условия ошибки. Вы не должны думать, что автоматический перезапуск является заменой для обучения тому, как избежать сбоя кода. – jfriend00

+0

Я больше не мог согласиться. Чтобы быть полностью честным, я уже начал обрабатывать ошибки, когда это абсолютно необходимо, и я планирую использовать то, что я узнал, чтобы охватить все возможные результаты. Thx для вашего времени и совета! –

2

Вы можете использовать команду Linux «at» для установки относительного таймера. Forever будет обрабатывать перезапуск скрипта, если он сработает.

  1. Запустить сценарий

    forever start /path/yourscript.js

  2. расписание команду остановки

    echo 'forever stop /path/yourscript.js' | at now + 12 hours

-

Обратите внимание, что вам может потребоваться установить «at» - ex. (apt-get install at)

Примечание Вы также можете запланировать «на», чтобы выполнить скрипт:

  • Создать файл «stopscript.sh», содержащий эту строку: forever stop /path/yourscript.js
  • установить «на» работу: at now +12 hours -f ~/stopscript.sh
1

cluster модуль, главный перезапуск кластера при возникновении ошибки.

в мастере, просто запустить такой код:

setTimeout(function() { 
    process.exit(0); 
}, 12 * 3600 * 1000); 
+0

Ваша математика немного устарела, как сделать 'setTimeout()' в течение 12 часов. Вы отключены в 1000 раз. – jfriend00

+0

@ jfriend00 спасибо за указание. – Calvinxiao

2

Если вы используете операционную систему UNIXy, вы можете использовать команду at убить навсегда в данный момент времени.

Пример:

$ echo 'forever stop whatever.js' | at now + 12 hours 
Смежные вопросы