crontab正在返回错误
问题描述:
我想用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
命令。
答
我认为你可以指定哪个用户应该在cron配置文件中运行该脚本。 因此,如果该脚本与您的用户一起工作,那么在您的cron配置filr中定义它。
查看答案举例... https://stackoverflow.com/a/8475757/3827004。
+1
系统crontab需要将帐户名称指定为第6个字段。一个普通的crontab,一个由'crontab'命令处理的crontab不会;该命令总是在使用'crontab'命令创建它的用户帐户下运行。 –
答
有当您启动从终端的应用程序diferentiate两件事情,当你从一个crontab文件做:
- 环境是不一样的,至少,如果你不执行你
.profile
脚本从您的cron工作。 - 您无权访问终端。 Cron作业不使用终端,因此您将无法打开
/dev/tty
。您必须非常小心如何处理重定向,因为您在运行交互式会话时将它们全部定向到您的tty,但从cron(8)
运行时,它们都将被重定向到管道。
这使得你的环境完全不同,通常是错误的来源。有关详细信息,请阅读crontab(1)手册页。
当你运行*个人*时,你是否将它作为'ammt'用户运行?什么用户用于运行cron?它是“根”吗?如果是这样,那么为什么你在'init.sh'而不是'/ home/ammt'中使用'$ {HOME}'? –
我用了ammt。如何检查命令行中的$ {Home}路径? $ {Home}被定义为/ home/ammt –
要检查它,你可以说'echo $ HOME'。 但是,根据您的评论,您是否仅仅使用'ammt'手动运行命令*还是您还使用它来运行'cron'并不清楚。你可以请扩展一下吗? –