zoukankan      html  css  js  c++  java
  • 记一次由于环境变量引起的crontab执行没有日志输出的问题

    今天在scrapy的代码中加入监测环境变量来动态配置setting的代码,但代码部署后发现以前正常的crontab 任务没有任何日志输出 了。手动命令行执行却是可以执行的。查看/var/message/cron发现脚本是执行的,但无法确认是否执行成功。

    于是把crontab的任务改了一下 把 

    */20 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh 改成了  */1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > cron.log

    结果郁闷的是在目录下没发现cron.log

    。。。。

    一开始还以为是crontab的执行出问题了,各种crond重启,网上搜,还是不行

    后来终于发现原来是语句写的有问题,*/1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > cron.log 这个会把文件输出到执行用户(root)的根目录下,而我原本是想在/home/hjdang/下面的(粗心了,改成*/1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > /home/hjdang/cron.log)就有了。

    但是脚本执行了,scrapy的日志啥的都没有啊,而且为了调试,我把

    nohup scrapy crawl smzdm_jingxuan  

    改成了

    nohup scrapy crawl smzdm_jingxuan & >> smzdm.log 10>&1 &

    但smzdm.log总是空文件。

    后来又发现这个语句也写的有问题,真是郁闷。改成下面终于看到输出了.

    nohup scrapy crawl smzdm_jingxuan  >> smzdm.log 10>&1 

    日志上报错了

    FileNotFoundError: [Errno 2] No such file or directory: '/Users/gaoxianghu/temp/scraping.log'

    明显是配置文件的路径找不到,但我明明用环境变量区分了啊,一顿搜索,终于发现了原因。有网友说:因为在Linux下用crontab执行定时任务时不会从用户profile文件中读取环境变量参数,所以导致在手动执行某个脚本时是成功的,但是写入crontab中定期执行时会出错。根本原因是某些命令无法使用crontab调用,因为用户登陆Linux操作系统的时候,”/etc/profile”, “~/.bash_profile”等配置文件会被自动执行,所以手动执行脚本能够成功,但是crontab执行失败。

    大意了啊,环境变量需要直接配在脚本中才行啊,配在环境变量文件里读不到啊,又一次雪的教训!

    喜欢艺术的码农
  • 相关阅读:
    hdfs校验和
    hdfs读写策略
    hdfs架构
    hdfs数据块
    元数据
    集群的创建
    jQuery_DOM操作
    jQuery_简介_选择器
    Ajax
    MySQL整理_2_数据库操作
  • 原文地址:https://www.cnblogs.com/zjhgx/p/14450247.html
Copyright © 2011-2022 走看看