脚本如下
export LANG=zh_CN.UTF-8
spider1='spider1'
kill -9 `ps -ef | grep $spider1 | grep -v grep | awk '{print $2}'`
cd ~/work/virtual/ # 切换到虚拟环境的目录,如果没有使用虚拟环境,则不需要
/usr/local/bin/pipenv shell # 激活虚拟环境
cd ~/work/spider # 进入scrapy爬虫项目的目录
nohup ~/.local/share/virtualenvs/spider-MGYoPRkA/bin/scrapy crawl $spider1 > out.file 2>&1 &
解释:
- 由于crontab里没有tty/pts(终端)这个事实,即不会执行
$HOME/
下的一些环境初始工作,所以需要设置export LANG=zh_CN.UTF-8
,不然会报UnicodeEncodeError: 'ascii' codec can't...
的错误 -
kill
的作用为每次执行前,先停掉正在运行的爬虫 - 由于
crontab
在运行时,有他自己的工作目录,所以需要切换到相应目录才能执行相应命令
本人每五分钟跑一次,crontab代码为
*/5 * * * * bash ~/work/start.sh
参考:
crontab文档
https://blog.csdn.net/kai404/article/details/53287563