【问题标题】:Nitrous.io, Python and Cron not workingNitrous.io、Python 和 Cron 不工作
【发布时间】:2015-01-30 21:14:00
【问题描述】:

因为我的脚本在从命令行调用它时运行良好。我正在尝试使用 cron 按计划运行此代码:

with open('out.txt', 'a') as f:
    f.write('Hello world! \n')

我已经设置了chmod a+x hello_world.py

但我想用 python3.3 在 Nitrous.io 中运行它,因为 which pythonwhich python3.3 分别返回 /home/action/.parts/bin/python/usr/bin/python3.3。我试图在脚本的开头添加一些 shebangs。

#!/usr/bin/python
#!/usr/bin/python3.3
#!/usr/bin/env python
#!/usr/bin/env python3.3
#!/home/action/.parts/bin/python (Weird, I know...)

命令 python 返回 2.7.6 python shell,python3.3/usr/bin/python3.3 返回 3.3.5 python shell。和ls /usr/bin/python* 输出:

/usr/bin/python            /usr/bin/python2.6-config  /usr/bin/python3.2-config    /usr/bin/python3.3m                             
/usr/bin/python2           /usr/bin/python2.7         /usr/bin/python3.2mu         /usr/bin/python3.3m-config                      
/usr/bin/python2.5         /usr/bin/python2.7-config  /usr/bin/python3.2mu-config  /usr/bin/python-config                          
/usr/bin/python2.5-config  /usr/bin/python2-config    /usr/bin/python3.3                                                           
/usr/bin/python2.6         /usr/bin/python3.2         /usr/bin/python3.3-config

我还在 PATH 和 PYTHONPATH 中添加了 python 路径:

#PATH=/usr/bin/python3.3:/home/action/.parts/bin:/home/action/.parts/sbin:/home/action/.parts/autoparts/bin:/home/action/.parts/autoparts/bin:/home/action/.parts/autoparts/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/action/.gem/ru
by/1.9.1/bin   

#PYTHONPATH=/usr/bin/python3.3

pidof cron 正在返回 cron 的进程 ID。

我尝试使用... > /path/to/cron.log 2&>1 重定向输出但没有成功。还有衍生品……

我的 crontab -e 文件看起来像:

PYTHONPATH=/usr/bin/python3.3
* * * * * /usr/bin/python3.3 /home/action/workspace/hello_world.py

但我无法让它工作...... 谁能帮助这个小家伙? :)

【问题讨论】:

  • 您检查过您的 cron 作业被记录到的日志文件吗?因为,可能存在与打开或写入该文件有关的权限相关错误。要查找它的登录位置,您可能需要查看 unix.stackexchange.com/questions/207/…askubuntu.com/questions/56683/where-is-the-cron-crontab-log
  • 在 Nitrous.io 中没有根。我无法检查 grep CRON /var/log/syslog :( 我设法使 * * * * * ls -la; >> /home/action/workspace/cron.log 工作正常。我还在脚本结果的奇怪路径中找到了一个文件,所以它工作在某个时间......我正在检查它

标签: python linux cron crontab nitrousio


【解决方案1】:

我的猜测 - 您的脚本运行良好。没有输出,没问题。只是不确定输出文件在哪里。

对于您的代码,请尝试使用绝对路径。

with open('/tmp/out.txt', 'a') as f:
    f.write('Hello world! \n')

顺便说一句 - #!没关系。

当你在 python 脚本前加上 python 解释器时:

/usr/bin/python3.3 <any-file>

python interperter,而不是 shell,执行文件并忽略 #!线。

【讨论】:

  • 我自己已经意识到了,但是既然你花时间有效地写了一个正确的答案并添加了一些额外的信息......我会给你点赞并接受它!哦,伙计,读了我自己的答案,我们说的几乎一样xD谢谢!
  • 呵呵,谢谢,谢谢。我想我们同时发布了答案。不过很高兴你想通了。
【解决方案2】:

它正在工作!似乎在 Nitrous 中,~/actions/ 充当根目录。因此,如果您尝试这样做:

with open('out.txt', 'a') as f:
    f.write('Hello world! \n')

您正在有效地创建一个包含内容的文件,但在 ~/actions/ 中,而不是在 /home/actions/workbench/out.txt 中的脚本文件的当前目录中,以使其按预期工作,我必须将其重写为:

with open('workbench/out.txt', 'a') as f:
    f.write('Hello world! \n')

crontab -e 文件中不需要 shebang 或 PYTHONPATH。 cron 命令和上面一样(在问题中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多