Node JS auto restart all forever JS process when server goes down / crashes

前端 未结 6 933
眼角桃花
眼角桃花 2021-02-07 05:37

I am using forever js to keep my node server running 24/7 on AWS EC2.

I use this command

forever start index.js

However, I notice that

6条回答
  •  无人共我
    2021-02-07 06:10

    Have you ever considered pm2 as an alternative. pm2 has some pretty neat features like:

    • Running a cluster
    • Restarting instances in the cluster one by one (zero downtime deployments)
    • Resource monitoring (shows realtime cpu and memory usage)
    • Manage all pm2 processes using the cli

    You can control restarts also by adding a --restart-delay option.

    Hereby a full output of the help of this tool.

    pm2 --help
    
                        -------------
    Looking for a complete monitoring and management tool for PM2?
     _                             _        _            _
    | | _____ _   _ _ __ ___   ___| |_ _ __(_) ___ ___  (_) ___
    | |/ / _ \ | | | '_ ` _ \ / _ \ __| '__| |/ __/ __| | |/ _ \
    |   <  __/ |_| | | | | | |  __/ |_| |  | | (__\__ \_| | (_) |
    |_|\_\___|\__, |_| |_| |_|\___|\__|_|  |_|\___|___(_)_|\___/
         |___/
    
                          Features
    
                   - Real Time Dashboard
                   - CPU/Memory monitoring
                   - HTTP monitoring
                   - Event notification
                   - Custom value monitoring
                   - Real Time log display
    
                          Checkout
    
                   https://keymetrics.io/
    
                        -------------
    
    [PM2] Spawning PM2 daemon
    [PM2] PM2 Successfully daemonized
    
    Usage: pm2 [cmd] app
    
    Commands:
    
    start [options]                   start and daemonize an app
    deploy                                             deploy your json
    startOrRestart                                                 start or restart JSON file
    startOrReload                                                  start or gracefully reload JSON file
    startOrGracefulReload                                          start or gracefully reload JSON file
    stop [options]                            stop a process (to start it again, do pm2 restart )
    restart [options]                         restart a process
    scale                                              scale up/down a process in cluster mode depending on total_number param
    reload                                                     reload processes (note that its for app using HTTP/HTTPS)
    gracefulReload                                             gracefully reload a process. Send a "shutdown" message to close all connections.
    id                                                             get process id by name
    delete                             stop and delete a process from pm2 process list
    sendSignal                                      send a system signal to the target process
    ping                                                                 ping pm2 daemon - if not up it will launch it
    updatePM2                                                            update in-memory PM2 with local PM2
    update                                                               (alias) update in-memory PM2 with local PM2
    install|module:install                                 install or update a module and run it forever
    module:update                                          update a module and run it forever
    module:generate [app_name]                                           Generate a sample module in current folder
    uninstall|module:uninstall                                   stop and uninstall a module
    publish|module:publish                                               Publish the module you are currently on
    set                                                      sets the specified config  
    multiset                                                      multiset eg "key1 val1 key2 val2
    get [key]                                                            get value for 
    conf [key] [value]                                                   get / set module config values
    config  [value]                                                 get / set module config values
    unset                                                           clears the specified config 
    interact [options] [secret_key|command] [public_key] [machine_name]  linking action to keymetrics.io - command can be stop|info|delete|restart
    link [options] [secret_key|command] [public_key] [machine_name]      linking action to keymetrics.io - command can be stop|info|delete|restart
    web                                                                  launch a health API on port 9615
    dump                                                                 dump all processes for resurrecting them later
    save                                                                 (alias) dump all processes for resurrecting them later
    resurrect                                                            resurrect previously dumped processes
    startup [platform]                                                   auto resurrect process at startup. [platform] = ubuntu, centos, redhat, gentoo, systemd, darwin, amazon
    logrotate                                                            copy default logrotate configuration
    generate                                                             generate an ecosystem.json configuration file
    ecosystem                                                            generate an ecosystem.json configuration file
    reset                                                   reset counters for process
    describe                                                         describe all parameters of a process id
    desc                                                             (alias) describe all parameters of a process id
    info                                                             (alias) describe all parameters of a process id
    show                                                             (alias) describe all parameters of a process id
    list                                                                 list all processes
    ls                                                                   (alias) list all processes
    l                                                                    (alias) list all processes
    status                                                               (alias) list all processes
    jlist                                                                list all processes in JSON format
    prettylist                                                           print json in a prettified JSON
    monit                                                                launch termcaps monitoring
    m                                                                    (alias) launch termcaps monitoring
    flush                                                                flush logs
    reloadLogs                                                           reload all logs
    logs [options] [id|name]                                             stream logs file. Default stream all logs
    kill                                                                 kill daemon
    pull  [commit_id]                                              updates repository for a given app
    forward                                                        updates repository to the next commit for a given app
    backward                                                       downgrades repository to the previous commit for a given app
    gc                                                                   force PM2 to trigger garbage collection
    deepUpdate                                                           performs a deep update of PM2
    *
    
    Options:
    
    -h, --help                           output usage information
    -V, --version                        output the version number
    -v --version                         get version
    -s --silent                          hide all messages
    -m --mini-list                       display a compacted list without formatting
    -f --force                           force actions
    -n --name                      set a  for script
    -i --instances               launch [number] instances (for networked app)(load balanced)
    -l --log [path]                      specify entire log file (error and out are both included)
    -o --output                    specify out log file
    -e --error                     specify error log file
    -p --pid                        specify pid file
    -k --kill-timeout             delay before sending final SIGKILL signal to process
    --max-memory-restart         specify max memory amount used to autorestart (in megaoctets)
    --restart-delay               specify a delay between restarts (in milliseconds)
    --env              specify environment to get specific env variables (for JSON declaration)
    -x --execute-command                 execute a program using fork system
    -u --user                  define user when generating startup script
    --hp                      define home path when generating startup script
    -c --cron              restart a running process based on a cron pattern
    -w --write                           write configuration in local folder
    --interpreter           the interpreter pm2 should use for executing app (bash, python...)
    --interpreter-args        interpret options (alias of --node-args)
    --log-date-format   add custom prefix timestamp to logs
    --no-daemon                          run pm2 daemon in the foreground if it doesn't exist already
    --skip-env                           do not refresh environmnent on restart/reload
    --source-map-support                 force source map support
    --only             with json declaration, allow to only act on one application
    --disable-source-map-support         force source map support
    --merge-logs                         merge logs from different instances but keep error and out separated
    --watch [paths]                      watch application folder for changes
    --ignore-watch        folder/files to be ignored watching, chould be a specific name or regex - e.g. --ignore-watch="test node_modules "some scripts""
    --node-args               space delimited arguments to pass to node in cluster mode - e.g. --node-args="--debug=7001 --trace-deprecation"
    --no-color                           skip colors
    --no-vizion                          start an app without vizion feature (versioning control)
    --no-autorestart                     start an app without automatic restart
    --no-treekill                        Only kill the main process, not detached children
    --no-pmx                             start an app without pmx
    --no-automation                      start an app without pmx
    
    Basic Examples:
    
    Start an app using all CPUs available + set a name :
    $ pm2 start app.js -i 0 --name "api"
    
    Restart the previous app launched, by name :
    $ pm2 restart api
    
    Stop the app :
    $ pm2 stop api
    
    Restart the app that is stopped :
    $ pm2 restart api
    
    Remove the app from the process list :
    $ pm2 delete api
    
    Kill daemon pm2 :
    $ pm2 kill
    
    Update pm2 :
    $ npm install pm2@latest -g ; pm2 update
    
    More examples in https://github.com/Unitech/pm2#usagefeatures
    
    Deployment help:
    
    $ pm2 deploy help
    

提交回复
热议问题