MacOS下Cron执行Python脚本遇requests缺失及Git权限问题求助
问题1:Cron执行Python脚本提示
ModuleNotFoundError: No module named 'requests' 原因
Cron运行时的环境变量与手动执行脚本的终端环境不一致,python3命令指向的Python解释器并非安装requests模块的版本,导致第三方库无法被找到。
解决方案
- 在终端执行以下命令,获取手动使用的Python解释器完整路径:
which python3
输出示例:/Users/nicolas/.pyenv/shims/python3或/usr/local/bin/python3。
2. 修改Cron任务配置,将python3替换为上述完整路径。修改后的Cron任务示例:
0 * * * * cd /Users/nicolas/Documents/Development/Journal/; /Users/nicolas/.pyenv/shims/python3 create_json.py >> /Users/nicolas/Documents/Development/Journal/Log.txt 2>&1
问题2:Cron执行Git提交提示
Permission denied (publickey) 原因
Cron运行时无法访问SSH私钥:未加载SSH代理,或环境变量未正确指向私钥文件,导致GitHub认证失败。
解决方案
方案1:在Shell脚本中指定SSH私钥路径
修改commit_git.sh,在Git命令前添加GIT_SSH_COMMAND指定私钥路径,确保Cron能读取到SSH私钥:
cd public GIT_SSH_COMMAND="ssh -i /Users/nicolas/.ssh/id_rsa" git add -A GIT_SSH_COMMAND="ssh -i /Users/nicolas/.ssh/id_rsa" git commit -m "Commit" GIT_SSH_COMMAND="ssh -i /Users/nicolas/.ssh/id_rsa" git push origin main
注意:替换
/Users/nicolas/.ssh/id_rsa为实际私钥路径,并确保文件权限为600(执行chmod 600 /Users/nicolas/.ssh/id_rsa设置)。
方案2:改用HTTPS远程仓库链接(无需SSH密钥)
将GitHub仓库远程链接从SSH格式改为HTTPS格式,并在macOS钥匙串保存凭证:
- 进入
public目录,执行:
git remote set-url origin https://github.com/你的用户名/你的仓库名.git
- 手动执行一次
git push,在弹出的钥匙串窗口选择保存凭证,后续Cron执行时可自动读取完成认证。
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

