【问题标题】:cron not launching a working python scriptcron 没有启动工作的 python 脚本
【发布时间】:2021-08-04 13:54:28
【问题描述】:

让 cron 在我的树莓派 3b 上工作时遇到的麻烦不止这些。 我写了一个 python 脚本,从 thonny 或终端启动它没有问题,它运行顺利。

但是,当以以下方式启动 cron 作业时(根据测试时间更改分钟和小时):

25 21 * * * /usr/bin/python3 /home/pi/main.py >> /home/log/myscript.log 2>&1

我收到以下错误消息:

Traceback (more recent call last):
   File "/home/pi/main.py", line 9, in <module>
       import tweepy
ImportError: No module named 'tweepy'

无论我打电话给sudo crontab -enano crontab -e 还是cron -e。 我开始调查,我猜想调用 python 版本的问题在哪里。

因此,我用python3.5 替换了python3 调用,后来用python3.5m 甚至用python3.8 替换了没有结果。在任何尝试中,我都尝试通过终端启动相同的命令,并且效果很好。 尝试卸载并重新安装 tweepy 并检查了 Thonny 使用的 python 是 3.5 版本。

有什么问题吗? 快把我逼疯了。

编辑: 我备份了我的脚本并将树莓派重新安装到最新版本(5.10.17 linux 内核)。 同样,我尝试将脚本与 Thonny 和终端一起使用并运行。

再次,我在使用 crontab 时遇到了同样的问题。

但是,我有一个想法。 我将 tweepy 版本更新为可用的最新版本,这就像一次绝望的尝试,但发生了一些变化。

而不是出现与 tweepy 相关的错误, cron 给了我这个:

Traceback (most recent call last):
  File "/home/pi/Documents/TwitterBot/main.py", line 17, in <module>
    a = soup.select('table > tr:has(> td > a:-soup-contains("San Pellegrino Terme")) td')
  File "/usr/lib/python3/dist-packages/bs4/element.py", line 1376, in select
    return soupsieve.select(selector, self, namespaces, limit, **kwargs)
  File "/usr/lib/python3/dist-packages/soupsieve/__init__.py", line 112, in select
    return compile(select, namespaces, flags, **kwargs).select(tag, limit)
  File "/usr/lib/python3/dist-packages/soupsieve/__init__.py", line 63, in compile
    return cp._cached_css_compile(pattern, namespaces, custom, flags)
  File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 205, in _cached_css_compile
    CSSParser(pattern, custom=custom_selectors, flags=flags).process_selectors(),
  File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 1010, in process_selectors
    return self.parse_selectors(self.selector_iter(self.pattern), index, flags)
  File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 852, in parse_selectors
    has_selector, is_html = self.parse_pseudo_class(sel, m, has_selector, iselector, is_html)
  File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 510, in parse_pseudo_class
    has_selector = self.parse_pseudo_open(sel, pseudo, has_selector, iselector, m.end(0))
  File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 654, in parse_pseudo_open
    sel.selectors.append(self.parse_selectors(iselector, index, flags))
  File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 852, in parse_selectors
    has_selector, is_html = self.parse_pseudo_class(sel, m, has_selector, iselector, is_html)
  File "/usr/lib/python3/dist-packages/soupsieve/css_parser.py", line 585, in parse_pseudo_class
    "'{}' pseudo-class is not implemented at this time".format(pseudo)
NotImplementedError: ':-soup-contains' pseudo-class is not implemented at this time

这是和beautifulsup Cron 运行的版本有关的问题。

我尝试将 beautifulsup 更新到可用的最新版本,但没有结果。

我开始想不通了, 任何帮助将不胜感激。

【问题讨论】:

  • 从脚本运行的终端,例如,如果您使用python3 main.py 运行脚本,请查看which python3 的输出。和 cron 作业中的一样吗(/usr/bin/python3)?
  • 是的。相同的路径
  • 好极了,那么您能说一下您使用的是哪个crontab,是系统范围的/etc/crontab 还是用户特定的/etc/crontab?作为能够很好地运行脚本的用户,您可以通过crontab -e 来编辑用户特定的脚本。
  • 我相信有一个系统范围的,谢谢。一回家就确认。另外,我编辑了问题
  • 如果使用crontab -e将命令添加到用户的crontab中不起作用,那么下一步应该检查终端中的sys.path是否与cronjob相同。在您的工作终端中,您可以运行python3 -m site 并注意输出吗?然后运行crontab -e 并添加* * * * * /usr/bin/python3 -m site &gt; /home/out.txt(或类似的)。稍等片刻,然后将out.txt 中的文本与上一个命令的输出进行比较...

标签: python cron python-3.5 libraries


【解决方案1】:

如果您正在运行一个虚拟环境,那么您在 shell 脚本中的路径需要针对该虚拟环境。这是我在 AWS linux 实例上运行 shell 的方法。你可以玩这个,但我花了一段时间才弄清楚。也许只是在 cron 中添加长环境路径并跳过 shell 脚本。

这是在 my_shell.sh 中

/usr/local/bin/pipenv run ~/.local/share/virtualenvs/ec2-user-zzkNbF-x/bin/python /home/ec2-user/my_path_to_file/my_file.py

这是我的 crontab 设置

0 21 * * mon-fri /home/ec2-user/my_path_to_file/my_shell.sh

【讨论】:

  • 谢谢乔纳森。我会试试看。我是个菜鸟,也许这对我的游戏来说是一种领先的方式,我没有使用虚拟环境。不过,我会试一试!
  • 如果您不使用虚拟环境,这不是您的问题,而是找到正确的路径。但是您的错误本身听起来不像是 cron 问题。这是关于定位 tweepy。
  • 我设法让 tweepy 在 cron 中工作,但现在是 beautifulsoup 问题。你介意帮助我找到正确的道路吗?谢谢
  • 创建一个新问题。最好让整个论坛来寻找好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多