Eu tenho tentado lidar com esse problema de toda a manhã.
Eu tenho um arquivo crawler.py
simples, que contém um código que só pode ser executado em python3 para ser exato em python3.3 evenrionment
Agora, minha máquina padrão do CentOs7 vem com o python2.7, portanto, sou forçado a mudar usando o python3 para executar meu script, exemplo:
scl enable python33 bash
exemplo.
[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
como você pode ver, ele alterou a versão após a qual, eu posso executar a execução simples crawler.py
sem um problema tão fácil quanto python crawler.py
.
Mas, eu preciso deste arquivo python para executar via cron, em horário específico da semana.
O problema é que uma vez que eu saio do meu VPS, o python2.7 se torna o padrão e se o cron o aciona, ele não será executado.
Para isso eu pensei que eu deveria usar o binário python3 em vez de apenas python ..
então, eu tentei com o seguinte
/opt/rh/python33/root/usr/bin/python3.3 crawler.py
Mas, parece que o binário não aparece unles você executa scl enable python33 bash
você pode ver isso por si mesmo,
[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
O binário, só aparece depois que o python33 é chamado via scl
. Então, o tempo todo eu tenho que dizer ao cron para executar o comando scl enable python bash
de alguma forma, então meus scripts python3 são executados sem problemas.
Então, criei um arquivo bash como
#!/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
Mas, uma vez que o bash executa o primeiro comando, ele sai do processo ou gera outros processos. até tentei colocar isso
scl enable python33 bash && python crawl.py
também
scl enable python33 bash && /opt/rh/python33/root/usr/bin/python3.3 crawl.py
Então, em poucas palavras, parece que não há maneira de executar um script python3 via cronjob, se você tiver alguma coisa além de python3 como padrão em sua máquina.