Python计划任务:/usr/local/bin:错误的解释器:权限被拒绝。

4

我在一个CentOS VPS上设置了以下的crontab:

SHELL=/bin/bash
HOME=/

* * * * * /root/ebay/findcheapitems.py

脚本手动运行时没有问题,使用以下命令:
python2.7 ebay/findcheapitems.py

该文件已通过dos2unix进行EOL转换,具有-rwxr-xr-x权限,并且文件的第一行为:

#!/usr/local/bin python2.7

然而,每次cron作业尝试运行时,我都会收到邮件,上面写着:
/bin/bash: /root/ebay/findcheapitems.py: /usr/local/bin: bad interpreter: Permission denied

我已经确认了Python2.7的位置,使用'which'命令:

# which python2.7
/usr/local/bin/python2.7

我是一个Linux的初学者,所以我肯定错过了一些简单的东西!


请参考以下链接:http://stackoverflow.com/questions/15351241/hadoop-usr-bin-env-python-no-such-file-or-directory。祝你好运。 - shellter
2个回答

7
您需要将文件路径指定为一个路径,而不是目录和文件名的组合:
#!/usr/local/bin/python2.7

否则,该目录路径将被视为可执行文件。 更新:如Kevin Guan建议,您也可以使用/usr/bin/env而不是指定可执行文件的完整路径。
#!/usr/bin/env python2.7

1
我建议使用 #!/usr/bin/env python2.7,因为它可以搜索 PATH 并运行 python2.7 - Remi Guan
@KevinGuan,感谢您的评论。我已更新答案以包含它。 - falsetru
为什么Linux可以找到确切的位置,即使您只提供了虚拟路径 /usr/bin/env? - cloudscomputes
@cloudscomputes,“/usr/bin/env”不是虚拟路径,而是指向名为“env”的程序的路径。https://unix.stackexchange.com/q/29608/81068 - falsetru
好的,明白了,谢谢。 - cloudscomputes

-1

使用

#!/usr/local/bin/python2.7

而不是#!/usr/local/bin python2.7


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接