首页 > 编程问答 >crontab 运行 .sh 文件调用 python 脚本

crontab 运行 .sh 文件调用 python 脚本

时间:2024-07-27 12:36:14浏览次数:4  
标签:python bash cron

我有一个 python selenium 脚本,可以打开 chrome 并为我运行一些自动化任务。在 crontab 中直接调用 python 可以使用下面的行。 :10.0 是我运行 echo $DISPLAY 时得到的值。我使用的是 Ubuntu 22.04.4 LTS

58 23 * * 2 DISPLAY=:10.0 /usr/bin/python3 /home/user/Script.py 

但是,我想将一些环境变量传递给 python 脚本,因此我创建了一个 sh 文件。手动触发时,bash 脚本将按预期工作。但当设置为在 cron 中运行时则不然。 Cron 日志显示它尝试运行该脚本。我可以看到从我的 python 脚本生成的日志文件,但没有写入任何内容,我猜它没有运行。

10 12 * * * DISPLAY=:10.0 /home/aaron/script.sh

这是 bash 脚本的内容

#!/bin/bash
#Boook facility 
/usr/bin/python3 /home/aaron/script.py -u $env1 -p $env2 -f "TEST" -t "7.00PM-9.00PM"

任何人都可以告诉我我在这里缺少什么?我不介意探索 cron 替代方案,只要我能让 bash 脚本运行即可。


问题在于 crontab 在一个非常有限的环境中运行,它无法访问你期望的相同环境变量。

这里有几种方法可以解决这个问题:

1. 在 crontab 中直接设置环境变量:

你可以在 crontab 文件中直接定义环境变量。例如:

10 12 * * *  env1="value1" env2="value2" DISPLAY=:10.0 /home/aaron/script.sh

2. 在脚本中获取环境变量:

你可以修改 bash 脚本,使其从文件中读取环境变量。例如,创建一个名为 .env 的文件,并将环境变量存储在其中:

env1="value1"
env2="value2"

然后在你的 bash 脚本中使用 source 命令加载这些变量:

#!/bin/bash
#Boook facility 
source /home/aaron/.env
/usr/bin/python3 /home/aaron/script.py -u "$env1" -p "$env2" -f "TEST" -t "7.00PM-9.00PM"

3. 使用 crontab -e 编辑器:

使用 crontab -e 命令编辑 crontab 文件时,你可以使用 source 命令加载你的 bash 配置文件(例如 .bashrc .zshrc ),这将加载你在 shell 中设置的所有环境变量。

# 在 crontab 文件的第一行添加以下内容
source ~/.bashrc 

# 其他 cron 任务
10 12 * * *  DISPLAY=:10.0 /home/aaron/script.sh

4. 使用 systemd timer:

systemd timer 是 cron 的一个更现代的替代方案,它提供了更多的灵活性和功能。使用 systemd timer,你可以创建一个 systemd 服务单元,并在其中定义环境变量。

调试建议:

  • 检查 cron 日志: 查看 cron 日志以获取有关脚本执行的更多信息。你可以使用 grep CRON /var/log/syslog sudo journalctl -u cron 命令查看日志。
  • 添加调试输出: 在你的 bash 脚本和 Python 脚本中添加 echo print 语句,以输出环境变量的值和其他相关信息,以便进行调试。

选择适合你需求的方法,并确保在进行更改后重新启动 cron 服务 ( sudo systemctl restart cron ).

标签:python,bash,cron
From: 78800500

相关文章

  • Pythonanywhere - ping:套接字:不允许操作
    请帮忙。我有一个Telegram机器人,当我从Bash控制台启动他时,它每60秒ping一次静态IP-它工作正常,但每天停止工作一次。我尝试使用“始终开启任务”,但在日志文件中收到“ping:套接字:不允许操作”。我有5美元帐户,我能做什么?从Bash控制台运行时我看到的内容:---17......
  • python+flask计算机毕业设计社区疫情防控物资调配平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球公共卫生事件的频发,尤其是新冠疫情的爆发,对社区治理与应急响应能力提出了前所未有的挑战。社区作为疫情防控的第一线,其物资调配......
  • python+flask计算机毕业设计四川工商学院疫情防控系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续蔓延的背景下,高校作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。四川工商学院作为一所集教学、科研、......
  • python+flask计算机毕业设计企业人事管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,传统的人事管理方式已难以满足现代企业对高效、精准、自动化管理的需求。企业人事管理涉及员工......
  • python+flask计算机毕业设计外卖食品安全监管微信小程序(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,外卖行业作为“互联网+餐饮”的典范,近年来呈现出井喷式增长态势,极大地便利了人们的日常生活。然而,外卖食品......
  • python+flask计算机毕业设计楼盘销售系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着房地产市场的蓬勃发展,楼盘销售作为房地产行业的重要环节,其管理效率与服务质量直接影响到企业的市场竞争力和客户满意度。传统的楼盘销......
  • python+flask计算机毕业设计基于web的小区疫情防控信息管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,特别是新冠疫情的持续影响,小区作为城市管理的基础单元,其疫情防控工作显得尤为重要。传统的小区管理方式在面对......
  • Python 3 使用 super() 函数时出现“类型错误:__init__() 获得多个参数值”
    我正在使用继承的Python3编写一个OOP程序,当我尝试像这样初始化子类时遇到标题错误:classParent:def__init__(self,var1,var2):self.var1=var1self.var2=var2#moremethodsthattosomestuffclassChild(Parent):a=1#aan......
  • 为什么我会收到 Python IOError: [Errno 13] 写入文件时权限被拒绝?
    我不明白我做错了什么。我正在运行一些测试并将结果写入文件。写入文件的代码部分如下(在名为Tester的类中):@staticmethoddefprintHeader(resultsFileName):ifnotos.path.isfile(resultsFileName):#Thefiledoesnotexist,thus#......
  • 为什么当我在 cmd 中输入 python - -version 时,除了空行之外什么都没有出现?
    我已经下载了python3.9。但是,在通过命令行检查版本时,我确实得到了一个空行而不是版本。我在cmd上使用了以下命令:python--version有几个原因可能会导致在cmd中输入python--version时只出现空行。以下是一些可能的解决方法:1.Python没有添加到......