我一直在努力处理这个问题。
我有一个简单的crawler.py文件,它包含一个只能在python3下运行的代码,在python3.3中是精确的
现在,我的默认CentOs7机器自带python2.7所以,我被迫切换使用python3来运行我的脚本,例如:
scl enable python33 bash
例。
[root@bt py]# python -V Python 2.7.5 [root@bt py]# scl enable python33 bash [root@bt py]# python -V Python 3.3.2
正如你所看到的,它改变了版本后,我可以运行简单的运行crawler.py没有像python crawler.py一样简单的问题。
但是,我需要这个python文件通过cron运行,在一周的特定时间。
问题是,一旦我从我的VPS注销,python2.7成为默认,如果cron触发它,它将不会运行。 为此,我想我应该使用python3二进制代替python ..所以,我尝试了以下
/opt/rh/python33/root/usr/bin/python3.3 crawler.py
但是,似乎二进制不出现unles你运行scl enable python33 bash
你可以自己看到这个
[root@bt ~]# whereis python python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz [root@bt ~]# scl enable python33 bash [root@bt ~]# whereis python python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /opt/rh/python33/root/usr/bin/python3.3m /opt/rh/python33/root/usr/bin/python3.3-config /opt/rh/python33/root/usr/bin/python3.3m-config /opt/rh/python33/root/usr/bin/python /opt/rh/python33/root/usr/bin/python3.3 /usr/share/man/man1/python.1.gz
二进制文件只在python33通过scl调用后出现。 所以,我一直告诉cron以某种方式执行scl enable python bash命令,所以我的python3脚本运行没有问题。
所以,我创build了一个bash文件
#!/bin/bash $(scl enable python33 bash) python crawler.py # alternatively I tried the below solution also. # /opt/rh/python33/root/usr/bin/python3.3 crawler.py
但是,一旦bash执行第一个命令,它将退出进程或产生其他进程。 甚至试图把这个
scl enable python33 bash && python crawl.py
也
scl enable python33 bash && /opt/rh/python33/root/usr/bin/python3.3 crawl.py
所以,简而言之,如果您的计算机中缺lesspython3,则无法通过cronjob运行python3脚本。
如果我理解正确,那么你想用cron来运行一个bash脚本,在python脚本中调用python会导致python33的版本。
我刚刚在scl上的python33的科学Linux机器上执行和testing,就像你的情况一样。
创build一个bash脚本:
$ cat /home/username/mybashfile.sh #!/bin/bash echo `date` >> /home/username/pythonversionfile python --version >> /home/username/pythonversionfile 2>&1
并创build一个像这样的cron条目:
* * * * * /usr/bin/scl enable python33 'bash -c /home/username/mybashfile.sh'
这意味着你调用scl来直接调用你之前创build的脚本来使用调用bash的python33环境。
这很好地工作,并给我以下输出:
$ tail pythonversionfile Wed Mar 30 17:36:01 CEST 2016 Python 3.3.2 Wed Mar 30 17:37:02 CEST 2016 Python 3.3.2 Wed Mar 30 17:38:01 CEST 2016 Python 3.3.2 Wed Mar 30 17:39:01 CEST 2016 Python 3.3.2 Wed Mar 30 17:40:01 CEST 2016 Python 3.3.2
所以你可以看到bash脚本每分钟都被cron调用,并且在bash脚本里面正确地设置了环境,python 3.3.2被调用。
Cronjob(例子):
0 1 * * * scl enable python33 'python /path/to/crawl.py'
scl的语法:
scl enable software_collection …'command …'
资源