2017-09-24 66 views
0

我想用Linux的crontab运行一些爬虫。crontab正在返回错误

这应该去Python环境与

pyenv shell jake-crawler 

这里是我的crontab -e

*/10 * * * * /home/ammt/apps/crawler/scripts/bat_start.sh 

这将每10分钟一班。当我输入

(jake-crawler) [[email protected]_OM crawler]$ /home/jake/apps/crawler/scripts/bat_start.sh 
[DEBUG|run.py:30] 2017-09-24 19:55:49,980 > BATCH_SN:1, COLL_SN:1, 1955 equal 0908 = False 

里面的bat_start.sh我有init.sh从而改变环境的Python此命令行工作正常。

这是我init.sh

#!/usr/bin/env bash 

export PATH="${HOME}/.pyenv/scripts:$PATH" 
eval "$(pyenv init -)" 
eval "$(pyenv virtualenv-init -)" 

pyenv shell jake-crawler 

这有没有问题,当我亲自命令行运行它。但是当cron自己运行它时,它找不到pyenv命令。

+1

当你运行*个人*时,你是否将它作为'ammt'用户运行?什么用户用于运行cron?它是“根”吗?如果是这样,那么为什么你在'init.sh'而不是'/ home/ammt'中使用'$ {HOME}'? –

+0

我用了ammt。如何检查命令行中的$ {Home}路径? $ {Home}被定义为/ home/ammt –

+0

要检查它,你可以说'echo $ HOME'。 但是,根据您的评论,您是否仅仅使用'ammt'手动运行命令*还是您还使用它来运行'cron'并不清楚。你可以请扩展一下吗? –

回答

0

我认为你可以指定哪个用户应该在cron配置文件中运行该脚本。 因此,如果该脚本与您的用户一起工作,那么在您的cron配置filr中定义它。

查看答案举例... https://stackoverflow.com/a/8475757/3827004

+1

系统crontab需要将帐户名称指定为第6个字段。一个普通的crontab,一个由'crontab'命令处理的crontab不会;该命令总是在使用'crontab'命令创建它的用户帐户下运行。 –

0

有当您启动从终端的应用程序diferentiate两件事情,当你从一个crontab文件做:

  • 环境是不一样的,至少,如果你不执行你.profile脚本从您的cron工作。
  • 您无权访问终端。 Cron作业不使用终端,因此您将无法打开/dev/tty。您必须非常小心如何处理重定向,因为您在运行交互式会话时将它们全部定向到您的tty,但从cron(8)运行时,它们都将被重定向到管道。

这使得你的环境完全不同,通常是错误的来源。有关详细信息,请阅读crontab(1)手册页。