Crontab未重新启动进程

2024-05-19 21:13:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试设置一个crontab来运行6个python数据刮取器。当其中一个失败时,我已经厌倦了手动重新启动它们。运行以下程序时:

>  ps -ef | grep python
ubuntu   31537     1  0 13:09 ?  00:00:03 python /home/ubuntu/scrapers/datascraper1.py

等等。。。我在同一个文件夹里有一个1-6个数据垃圾的列表。在

我这样编辑我的crontab:

sudo crontab -e

^{pr2}$

然后我点击control+X退出,点击yes保存为/tmp/crontab.M6sSxL/crontab。 但是,无论是手动终止进程还是进程本身失败,重新启动甚至启动datascraper1.py都不起作用。接下来,我尝试重新加载cron,但还是没用:

sudo cron reload

最后,我尝试从cron语句中删除nohup,但也没有成功。 我如何检查cron.允许或者克朗。拒绝文件是否存在? 另外,我需要在pgrep之前添加用户名吗?我也不确定“>;测试输出“在cron语句的末尾执行。在

运行后

grep CRON /var/log/syslog 

为了检查cron是否运行,我得到以下输出:

ubuntu@ip-172-31-29-12:~$ grep CRON /var/log/syslog
Jan  5 07:01:01 ip-172-31-29-12 CRON[31101]: (root) CMD (pgrep -f datascraper1.py ||       
python /home/ubuntu/scrapers/datascraper1.py > test.out)
Jan  5 07:01:01 ip-172-31-29-12 CRON[31100]: (CRON) info (No MTA installed, discarding output)
Jan  5 07:17:01 ip-172-31-29-12 CRON[31115]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jan  5 08:01:01 ip-172-31-29-12 CRON[31140]: (root) CMD (pgrep -f datascraper1.py || python /home/ubuntu/scrapers/datascraper1.py > test.out)

因为有证据表明Cron在执行命令,所以这个命令一定有问题,(注意:我添加了python的路径):

pgrep -f datascraper1.py || /usr/bin/python /home/ubuntu/scrapers/datascraper1.py > test.out

它应该检查datascaper1.py是否正在运行,如果没有,则重新启动它。在

因为Cron实际上是在执行这个语句:

(root) CMD (pgrep -f datascraper1.py || python /home/ubuntu/scrapers/datascraper1.py > test.out)

又名

root pgrep -f datascraper1.py

运行上面的根命令可以得到:

The program 'root' is currently not installed. You can install it by typing:
sudo apt-get install root-system-bin

Cron从根目录运行命令是否有问题?在

谢谢你的帮助。在


Tags: pytestipcmdhomeubunturootout
2条回答

您需要在作业开始时将python home添加到路径中,但是已经设置了python。当您自己运行它并键入python时,它会检查您所在的位置,然后再向下一级检查$PATH。因此,python home(python二进制文件所在的位置)需要为拥有cron的用户全局导出(因此,将它放在/etc/rc.d/中的rc脚本中),或者,您需要在cron作业开始时将python home附加到path。所以

 export PATH=$PATH:<path to python>

或者,将cron条目写为

^{pr2}$

直接给它打电话。它可能不是/usr/bin,请运行命令

'which python'

找出答案。在

“No MTA”消息意味着您正在获取STDERR,它通常会通过邮件发送给用户,但不能,因为您没有设置邮件传输代理(如mailx或mutt),因此无法从cron传递用户的邮件,因此它被丢弃。如果您希望STDERR也在最后进入日志,而不是

 "command" > test.out

 "command" 2>&1 > test.out

将STDERR重定向到STDOUT,然后将两者重定向到测试输出. 在

首先,您需要查看cron是否工作正常。 将它添加到cron文件中(最好现在删除python语句,以获得清晰的状态)

* * * * * echo `date` >>/home/your_username/hello_cron

这将每分钟输出文件“hello\u cron”中的日期。试试这个,如果这个方法有效(你每分钟都能看到输出),写在这里,我们可以进一步排除故障。在

您还可以在系统日志中查看cron是否运行了您的命令,如下所示:

^{pr2}$

顺便说一下>;测试输出part将python程序的输出重定向到该文件测试输出. 我不确定您为什么需要nohup部分—这将允许python程序在您注销时运行—这是您想要的吗?在

编辑:排除cron故障后:

有关未安装MTA的消息表示cron正在尝试向您发送包含作业输出的电子邮件,但无法发送,因为您没有安装电子邮件程序:

也许这能解决问题: sudo apt get安装后缀

在cron中调用python程序的行产生了一些输出(一个错误),因此查看发生了什么最符合您的利益。查看本教程以了解如何设置电子邮件地址:http://www.cyberciti.biz/faq/linux-unix-crontab-change-mailto-settings/

以防教程不可用:

MAILTO:youremail@example.com

相关问题 更多 >