无法在系统重启Ubuntu Crontab上启动Node

时间:2016-06-04 10:04:47

标签: linux node.js ubuntu crontab forever

我已经尝试了一切。即使尝试在/etc/rc.local中添加永久启动代码也没有用。

当我在@reboot中使用/etc/rc.local关键字时,表示无法找到@reboot

所以我回到使用crontab这是我的crontab脚本。除重启之外,所有其他crontabs都在工作。在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选项卡中的reboot命令正在运行但由于某种原因永远不会启动节点。重新启动后,我会永远运行列表并显示No forever processes running

我假设问题是以某种方式使用节点和永远路径。我是新手,并且不知道在crontab中使用此语句的确切路径。

enter image description here

我也尝试了以下内容:

@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 directoy时,以下行完美。我希望这可以在重启时使用。

forever -m5000 -w start index.js

请帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用代码而不是使用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

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

答案 1 :(得分:0)

建议将stdout / stderr重定向到文件以调试crontab中的脚本无法正常工作的原因:

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

重启后请参阅日志文件了解详细信息。

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