linux用crontab运行shell脚本

浏览: 2325

在liunx下经常需要定时执行某些脚本,不可避免用到crontab,而紧随着crontab一系列不启动的问题,网上已经有很多教程。在此,我就讲下用虚拟环境启动xxx.sh文件踩过的坑

1、虚拟环境下运行python

     Linux系统中,python需要用到多个版本,如用到pyenv安装python,这样可以保证python之间互不影响。例如我要运行个xxx.py程序,首先进入虚拟环境:

$ pyenv activate env3web
$ python xxx.py

保证python的文件能够执行就ok

2、设置test.sh文件

开始的时候,我的test.sh是这样的:

. ~/.bashrc  #设置环境变量的文件
cd /home/jordan #跳转用户目录
pyenv activate env3web #进入虚拟环境
/cnn/pyenv/.pyenv/shims/python python_flask.py >> ./python_flask.log #python程序路径执行相关文件,结果传递到log中

设置好后,直接在linux执行文件,查看是否能够运行     例如:$./home/jordan/test.sh

3、设置crontab

crontab -e

直接编辑要执行的命令,如:

* * * * * /home/jordan/test.sh>>/home/jordan/tt.text

命令表示每分钟执行一次test.sh,这时候突然发现命令能够生成tt.text,但是没有输出任何信息,这时候在linux输入命令:

$/etc/init.d/cron status

可以看到相关信息:

(jordan) CMD (/home/jordan/test.sh>/home/jordan/kk.text )
(CRON) info (No MTA installed, discarding output)

网上找了一下原因,crontab -e模式下执行的命令要加后缀

 * * * * * /home/jordan/test.sh>>/home/jordan/tt.text 2>&1

保存再执行后,在tt.text日志中可以看到还是环境变量和路径设置报错,导致test.sh没执行,对此,需要重设环境变量。

因此在linux中输入命令:

set|more

在里面找到LD_LIBRARY_PATH和PATH内容,然后添加之前面的test.sh文件,例如我的test.sh改后如下:

export PATH=/home/jordan/torch/install/bin:/usr/local/cuda-8.0/bin:/cnn/pyenv/.pyenv/shims:/cnn/pyenv/.pyenv/bin:/home/jordan/torch/install/bin:/home/jordan/bin:/home/jordan/.local/bin:/home/jordan/torch/install/bin:/usr/local/cuda-8.0/bin:/cnn/pyenv/.pyenv/shims:/cnn/pyenv/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export LD_LIBRARY_PATH=/home/jordan/torch/install/lib:/opt/oracle/instantclient_12_2:/home/jordan/torch/install/lib:
set

cd /home/jordan
pyenv activate env3web
/cnn/pyenv/.pyenv/shims/python python_flask.py >> ./python_flask.log

保存执行后终于成功,这样crontab每分钟能够执行python脚本


另外

由于虚拟环境配置的环境变量比较乱,特地重新安装了linux的虚拟环境,发现脚本不需要那么多环境配置,运行下面shell脚本test.sh就可以进入虚拟环境运行python脚本

export PYENV_ROOT="/cnn/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
cd /home/jordan
pyenv activate env3web
/cnn/pyenv/.pyenv/shims/python python_flask.py >> ./python_flask.log


总结:

由于对linux系统的各种命令还不熟悉,在crontab不能定时执行时,一般来讲都是环境变量和路径设置有问题,这需要我们一个个去排除它。

推荐 2
本文由 走马兰台 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册