运行cronjob我收到以下错误:
From cchilders@C02S21TWG8WMMBP.localdomain Fri Sep 30 15:58:00 2016
Return-Path: <cchilders@C02S21TWG8WMMBP.localdomain>
X-Original-To: cchilders
Delivered-To: cchilders@C02S21TWG8WMMBP.localdomain
Received: by C02S21TWG8WMMBP.localdomain (Postfix, from userid 501)
id D84CE1453D2; Fri, 30 Sep 2016 15:58:00 -0500 (CDT)
From: cchilders@C02S21TWG8WMMBP.localdomain (Cron Daemon)
To: cchilders@C02S21TWG8WMMBP.localdomain
Subject: Cron <cchilders@C02S21TWG8WMMBP> /usr/local/bin/python ~/scripts/updates/update_files.py pull
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=cchilders>
X-Cron-Env: <USER=cchilders>
X-Cron-Env: <HOME=/Users/cchilders>
Message-Id: <20160930205800.D84CE1453D2@C02S21TWG8WMMBP.localdomain>
Date: Fri, 30 Sep 2016 15:58:00 -0500 (CDT)
Traceback (most recent call last):
File "/Users/cchilders/scripts/updates/update_files.py", line 12, in <module>
from ez_scrip_lib.updates import pull_system_file_from_scripts_project_and_update_it, push_system_file_to_scripts_project
ImportError: No module named ez_scrip_lib.updates
但是这个库绝对可用:
In [1]: from ez_scrip_lib.updates import pull_system_file_from_scripts_project_and_update_it, push_system_file_to_scripts_project
In [2]:
/scripts/updates/update_files.py:
#!/usr/bin/env python
import sys
from ez_scrip_lib.updates import pull_system_file_from_scripts_project_and_update_it, push_system_file_to_scripts_project
files = [{'real_path': '.fake', 'repo_path': 'bash/fake-one'},
{'real_path': '.fake2', 'repo_path': 'bash/fake2'},
{'real_path': '.fake3', 'repo_path': 'bash/fake3'}
]
callbacks = {'pull': pull_system_file_from_scripts_project_and_update_it,
'push': push_system_file_to_scripts_project}
args = sys.argv
purpose_arg = args[1]
for f in files:
callbacks[purpose_arg](**f)
最近我改变了shebang以匹配,使用#!/usr/local/bin/python
仍然无法正常工作
我现在找到我的包的方式来自我的.bash_profile:
SCRIPTS="$HOME/scripts"
export PYTHONPATH="${PYTHONPATH}:$SCRIPTS"
脚本项目:
〜/脚本/
__init__.py
~/scripts/__init__.py
~/scripts/ez_scrip_lib/__init__.py
~/scripts/ez_scrip_lib/updates.py
~/scripts/updates/update_files.py
我的库ez_scrip_lib
也在脚本项目中,为方便起见(我一次在一个编辑器中更新所有内容)。它可能应该被打破,因为它非常大,但没有一次我的脚本在查找ez_scrip_lib
内的内容时遇到问题。只有在这个cronjob中它才会失败
这个脚本在命令行运行时运行正常:
./scripts/updates/update_files.py pull
从crontab中删除python解释器,因为脚本已经有了shebang(一个SO建议)也不起作用:
*/1 * * * * ~/scripts/updates/update_files.py pull
同样的错误
由于某些原因,Cronjobs似乎总是无法运行python文件,但至少在Mac上我自动收到错误日志。如何在运行python脚本时让这个cronjob找到我的包?谢谢
答案 0 :(得分:1)
Cron
不知道哪个目录与项目相关,只知道相对于自身的目录。它很可能在la-la land的某个地方寻找模块。快速修复可能是指定脚本的工作目录,然后尝试导入模块:
os.chdir("/Users/cchilders/scripts/updates")
或者沿着这些方向的东西应该让事情恢复正常......