美文网首页
crontab定时执行node命令行工具

crontab定时执行node命令行工具

作者: 无米学炊 | 来源:发表于2018-11-11 13:06 被阅读127次

    开发了一个登录readfree.me网站的node命令行工具,部署在一台云主机上面。想法是通过 crontab编写一条规则:

    // crontab -e
    0 8 * * * rflogin
    

    在首次登录后,就可以每日自动登录了。

    这样弄好之后,观测了两天,然而事与愿违,查看readfree.me上签到记录好像少了些记录啊。

    不知道所以,于是乎只能查看日志:

    查看cron的执行日志:

    cat /etc/log/cron | grep rflogin
    
    执行记录

    可以看到还是执行了设定的命令,然而为什么没有登录?

    已经执行命令,但没有登录,有点和常理相悖论啊,我直接命令行执行rflogin都显示登录成功的。

    于是乎百度、谷歌。。心疲力尽。终究发现些蛛丝马迹,执行命令可以将输出导出到一个日志文件中:

    0 8 * * * rflogin  >> /var/log/rflogin.log
    

    这个是每天8点执行,明天8点再来看看日志?开始我就是这样想的,人老了,思维定势有点伤。然而转念一想都是定时任务,每分钟执行一次不就好了,故先修改为:

    // 注意千万加上  2>&1,表示将标准输出和出错信息都重定向到 rflogin.log中
    // 如果没有加,我观测日志文件是为空的
    0 8 * * * rflogin  >> /var/log/rflogin.log  2>&1
    

    然后查看日志这个日志文件:

    cat /var/log/rflogin.log
    

    输出一大堆我还认识东西:


    /var/log/rflogin.log

    这就更让我费解了,我明明是使用 npm 全局安装的, 在命令行里面都能成功,为何crontab就不行?

    于是乎想到是不是命令行和crontab执行时的 $PATH不一样:
    修改一下命令:

    * * * * * echo $PATH >> /var/log/rflogin.log 2>&1
    

    然后查看日志文件:

    image.png
    对比一下果然是是不一样。
    知道原因就好解决了: 参考crontab中PATH的坑 大致知道了原因,也知道修改了:
    30 8 * * * export PATH=/root/.nvm/versions/node/v10.13.0/bin:$PATH; rflogin >> /var/log/rflogin.log 2>&1
    

    试用过 . /etc/profile这种方式,还是没有生效,故直接手动加上环境变量。

    参考:
    crontab中PATH的坑
    Linux cron运行原理

    相关文章

      网友评论

          本文标题:crontab定时执行node命令行工具

          本文链接:https://www.haomeiwen.com/subject/qzexfqtx.html