Python Crontab只运行我脚本的一部分

Python Crontab只运行我脚本的一部分,python,linux,sh,crontab,Python,Linux,Sh,Crontab,我的脚本首先执行两个python脚本,将传感器中的温度写入文件,然后通过ftp从.sh文件中上传 由于某些原因,只有在手动运行.sh文件时,温度才会更新。当crontab运行脚本时,它只上传ftp,但除了take_pic.py之外,它似乎没有运行python脚本 crontab是从根目录的crontab执行的 python文件是可执行的 日志文件没有显示任何内容 如果我手动运行脚本,一切都会完美运行 ftp.sh: echo "Run :$(date)" >> python_temp

我的脚本首先执行两个python脚本,将传感器中的温度写入文件,然后通过ftp从.sh文件中上传

由于某些原因,只有在手动运行.sh文件时,温度才会更新。当crontab运行脚本时,它只上传ftp,但除了take_pic.py之外,它似乎没有运行python脚本

  • crontab是从根目录的crontab执行的
  • python文件是可执行的
  • 日志文件没有显示任何内容
  • 如果我手动运行脚本,一切都会完美运行
  • ftp.sh:

    echo "Run :$(date)" >> python_temp.log
    python write_temp.py >> python_temp.log
    
    python temp_to_file.py >> python_temp_to_file.log
    
    #raspistill -o snapshot2.jpg -n -w 1280 -h 720
    
    python takePic.py
    sleep 3
    HOST=XX                #This is the FTP servers host or IP address.
    USER=XX                #This is the FTP user that has access to the server.
    PASS=XX                #This is the password for the FTP user.
    NOW=$(date +"%c")
    
    #    echo beginne upload
        touch work
        ftp -inv $HOST << EOF
    user $USER $PASS
    cd /bilder/
    put snapshot2.jpg
    rename snapshot2.jpg snapshot.jpg
    
    put temp.js
    
    bye
    EOF
    #    echo erfolgreicher upload
    
    Crontab:

    */5 * * * * /root/ftp.sh
    

    您的
    ftp.sh
    脚本中是否有shebang,即它是否以
    #开头/usr/bin/env bash
    行,您没有在这里显示吗


    如果没有,则需要添加它,或者在crontab中必须运行
    bash/root/ftp.sh
    。否则,您的脚本将无法正确执行。

    此问题主要是由于脚本文件权限和脚本文件所有权引起的。我也面临同样的问题。我发现我的纸条所有者不是超级用户,例如root。

    因此,您必须将您的纸条的权限和所有权设置为超级用户。在下面找到

    首先,以超级用户身份编辑crontab

    [abc@host] crontab -e
    
    并保存crontab
    :wq

    现在为脚本设置权限

    [abc@host] chmod +x script.sh
    [abc@host] chown root:root script.sh
    
    现在重新启动crontab

    [abc@host] /etc/init.d/crond restart
    

    >如果我手动运行脚本,一切都会正常运行

    在运行任何命令之前,可以将.bash_配置文件包含在/root/ftp.sh中

    /root/.bash\u配置文件

    我经常在cron jobs中遇到这样的问题。当概要文件处于活动状态时,在shell中测试它们,当cron作业运行时,环境(路径和其他内容)不可用


    我查看了您的两个脚本,第一个脚本仅使用OS命令,但第二个脚本调用Temple poll,这可能对cron job不可用。

    python解释器可能无法找到takePic.py脚本

    因为cronjob是在用户主目录中执行的(例如:/home/myuser/)。因此,请使用脚本的完整路径:

    python /some/path/takePic.py >> /some/path/python_temp.log
    

    同时发布您的crontab语法。你经历过吗?有很好的调试信息。我认为问题在于子流程检查输出不适用于crontab。您可能需要使用完整路径,因为crontab不知道它在哪里运行。检查我提供的链接,这里有很好的信息。问题是,正如我所说的,上传每5分钟就会像一个符咒一样工作。所以我认为这不是问题。如果你想解决这个问题,你可以尝试做一些研究。我向你指出了一些资源,但你似乎没有检查它们。如果您认为crontab中没有问题,那么只需删除crontab标记,这样我们这些对crontab有一定了解的人就不会感到麻烦了
    python /some/path/takePic.py >> /some/path/python_temp.log