【问题标题】:Unable to start Node on system reboot Ubuntu Crontab无法在系统重新启动 Ubuntu Crontab 时启动节点
【发布时间】:2016-10-04 09:03:38
【问题描述】:

我尝试过在/etc/rc.local 中添加永久启动代码,但没有成功。

当我在/etc/rc.local 中使用@reboot 关键字时,它显示@reboot 找不到。

所以我回到使用crontab 这是我的 crontab 脚本。除了重新启动之外,所有其他 crontab 都在工作。在syslog,它说

Jun  4 09:51:12 ip-172-31-28-35 /usr/sbin/irqbalance: Balancing is ineffective on systems with a single cache domain.  Shutting down
Jun  4 09:51:12 ip-172-31-28-35 cron[959]: (CRON) STARTUP (fork ok)
Jun  4 09:51:12 ip-172-31-28-35 cron[959]: (CRON) INFO (Running @reboot jobs)
Jun  4 09:51:12 ip-172-31-28-35 CRON[1005]: (ubuntu) CMD (/usr/bin/sudo -u ubuntu /usr/local/bin/forever start home/ubuntu/chat2/index.js)

这表明我的 cron 选项卡中的重新启动命令正在运行,但由于某种原因,永远仍然无法启动节点。重启后,我永远运行列表,上面写着No forever processes running

我假设问题出在 节点和永久路径上。我是新手,不知道在 crontab 中的这条语句上使用哪个确切路径。

我还尝试了以下方法:

@reboot /usr/local/bin/forever start -c /usr/local/bin/node /home/ubuntu/chat2/index.js

和

@reboot /usr/local/bin/forever start /home/ubuntu/chat2/index.js

这些都不起作用。

如果我运行which forever,它会说

/usr/local/bin/forever

如果我运行which node,它会说

/usr/local/bin/node

如果我得到我的 index.js 应用程序文件的完整路径,通过在我的 chat2 目录中执行 readlink -f index.js 它说

/home/ubuntu/chat2/index.js

我只想在每次系统重新启动时运行此命令。我想启动我的节点应用程序。当我手动 cd 到 chat2 目录时,以下行完美运行。我希望它能够自行重启。

forever -m5000 -w start index.js

【问题讨论】:

    标签: node.js linux ubuntu cron forever


    【解决方案1】:

    您可以使用您的代码而不是使用 cron 创建服务。实际上我更喜欢这样,因为您可以随时停止或启动它,也可以在系统重新启动或启动时运行它。

    所以:

    1- 在 /etc/init.d/name_of_file 中创建服务

    #!/bin/bash
    #/etc/init.d/name_of_file
    ### BEGIN INIT INFO
    # Provides:          name
    # Required-Start:    $syslog
    # Required-Stop:     $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: add service
    # Description:
    #
    ### END INIT INFO
    
    # Some things that run always
    
    case "$1" in
      start)
        echo "Starting app_name "
        touch /var/lock/app_name
        cd /where/is/your/file
        node index.js &
        ;;
      stop)
        echo " Stopping "
        rm /var/lock/app_name
        sudo pkill -f node
        ;;
      status)
       if [ -e /var/lock/app_name ]
       then
            echo "app_name is running"
       else
            echo "app_name is not running"
       fi
       ;;
      *)
        echo "Usage:service app_name{start|stop|status}"
        exit 1
        ;;
    esac
    
    exit 0
    

    因此,您创建了一个服务来运行您的 nodejs 应用程序。

    您必须授予该脚本的运行权限

    chmod +x /etc/init.d/app_name
    

    现在您唯一需要做的就是将其配置为在启动时运行。

    运行:

    sudo update-rc.d app_name defaults
    

    然后每次重新启动计算机时,该服务都会自行启动。

    【讨论】:

      【解决方案2】:

      建议将 stdout/stderr 重定向到文件以调试为什么您在 crontab 中的脚本不起作用:

      /usr/local/bin/forever start -c /usr/local/bin/node /home/ubuntu/chat2/index.js >/tmp/forever.log 2>&1 &

      重启后查看日志文件了解详情。

      您也可以尝试pm2 ,就像永远一样,但支持内置系统启动脚本生成,并在重新启动后启动您的应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 2014-10-13
        • 2016-05-26
        • 1970-01-01
        • 2017-09-10
        相关资源
        最近更新 更多