微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cron 没有启动一个有效的 python 脚本

如何解决cron 没有启动一个有效的 python 脚本

让 cron 在我的 raspBerry pi 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 代替了 python3.5 调用,后来用 python3.5m 代替,甚至用 python3.8 都没有结果。在任何尝试中,我都尝试通过终端启动相同的命令,并且运行良好。 尝试卸载并重新安装 tweepy 并检查了 Thonny 使用的 python 3.5 版本。

有什么问题? 气死我了。

编辑: 我备份了我的脚本并将 raspBerry pi 重新安装到最新版本(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,flags,**kwargs).select(tag,limit)
  File "/usr/lib/python3/dist-packages/soupsieve/__init__.py",line 63,in compile
    return cp._cached_css_compile(pattern,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,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,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,flags))
  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 更新到可用的最新版本,但没有结果。

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

解决方法

如果您正在运行虚拟环境,则 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。