【从零建站】错题集(已解决):cron运行.py报错permission denied, can‘t cd /, No module named

本文详细介绍了在Ubuntu服务器上使用cron定时运行Python脚本时遇到的权限问题、找不到模块问题及解决方案。首先,通过chmod调整.sh文件权限,然后解决因.py文件不在服务器本地创建导致的错误,最后确定Python的路径并设置PYTHONPATH环境变量,确保cron能正确执行。通过这些步骤,成功实现cron定时运行Python Flask应用。
摘要由CSDN通过智能技术生成

在腾讯云ubuntu服务器上使用cron定时运行.py时的几个报错
首先假设我们需要使用cron运行如下test.sh文件

#!/bin/sh
cd /home/ubuntu/Programs/pfm_flask && nohup python -u pfm_flask.py runserver --threaded >> pfm_flask.log 2>&1 &

相应的crontab -e命令行如下

0 9 * * * sh /home/ubuntu/Programs/pfm_flask/test.sh > /home/ubuntu/Programs/pfm_flask/pfm_cron.log 2>&1

在此设置下:
cron报错存至 /home/ubuntu/Programs/pfm_flask/pfm_cron.log
.py报错存至 /home/ubuntu/Programs/pfm_flask/pfm_flask.log

  1. permission denied

    permission denied
    

    当不允许cron使用目标.sh文件时调整权限,增加x

    chmod 755 test.sh  # 增加全员x
    
  2. can’t cd /…

    error: cd: can't cd to /home/ubuntu/programs/prg
    

    如上报错,参考这位大佬,原因是我用了pycharm专业版远程创建了.sh文件,而必须要在服务器创建.sh才行,如下

    touch test.sh			# 在目标目录下创建.sh文件
    chmod 755 test.sh		# 修改.sh文件的读写权限,允许cron运行该文件
    
  3. ImportError: No module named …
    这是由于cron运行时不能获得ubuntu账号登录运行时的python相关地址,因此采用如下方式找到相应的地址(参考这里
    在这里插入图片描述

    > which python	# 获得python本身的路径
    /usr/bin/python
    > python
    > import sys
    > sys.path		# 进入python获得python调用包的路径
    ['', 
    	'/usr/lib/python3.9/lib/python39.zip', 
    	'/usr/lib/python3.9/lib/python3.9', 
    	'/usr/lib/python3.9/lib/python3.9/lib-dynload', 
    	'/home/ubuntu/.local/lib/python3.9/site-packages',
    	'/usr/lib/python3.9/lib/python3.9/site-packages'
    ]
    # 这个列表中的最后两项即是包路径
    

    通过如上方式获得路径后,增加到.sh文件中

    #!/bin/bash		# sh不支持source, 因此修改为bash
    
    export PYTHONPATH=/home/ubuntu/.local/lib/python3.9/site-packages:/usr/lib/python3.9/lib/python3.9/site-packages:$PYTHONPATH
    # 重要:补充上文查找到的PYTHONPATH
    cd /home/ubuntu/Programs/pfm_flask && nohup /usr/bin/python -u pfm_flask.py runserver --threaded >> pfm_flask.log 2>&1 &
    # 修改python为上文查到的绝对路径的/usr/bin/python
    

    上述修改即可;也有人推荐了如下修改,实测不适合上述情况

    source /etc/profile		# 实测这一句不需要;补充非登录状况下配置文件
    source ~/.bashrc		# 实测这一句不需要;同上
    export PATH=/home/ubuntu/.local/lib:/usr/lib:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:PATH
    # 实测不需要
    

    如果用了source命令,就需要将#!/bin/sh中的sh改成bash,相应的cron命令也需要修改为bash

最终可运行的脚本

创建test.sh

> cd /home/ubuntu/Programs/pfm_flask	# 项目路径
> ls
pfm_flask.py		# 项目路径下需要运行的.py文件名
> touch test.sh
> chmod 755 test.sh

test.sh

#!/bin/bash

export PYTHONPATH=/home/ubuntu/.local/lib/python3.9/site-packages:/usr/lib/python3.9/lib/python3.9/site-packages:$PYTHONPATH	
# 指定python路径
cd /home/ubuntu/Programs/pfm_flask && nohup /usr/bin/python -u pfm_flask.py runserver --threaded >> pfm_flask.log 2>&1 &
# 先控制cron进入项目路径
# &&: 下一行命令
# nohup: no hang up
# /usr/bin/python: 需要前面查明的绝对路径调起python
# -u: 兼容err和log写入?忘记了
# runserver --threaded: 测试flask.py的并发权宜之计
# >> pfm_flask.log: 这个.py文件运行log的存放地址
# 2>&1: 错误日志存入同一个(pfm_flask.log)文件
# &: 后台运行

crontab -e

0 9 * * * bash /home/ubuntu/Programs/pfm_flask/test.sh > /home/ubuntu/Programs/pfm_flask/pfm_cron.log 2>&1
# 0分
# 9点
# *日
# *月
# *星期, 每次到达如上时间则运行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误提示是"PermissionError: [Errno 13] Permission denied: 'data/generated_data.csv'",意味着在访问文件"data/generated_data.csv"时出现了权限被拒绝的错误。根据引用和引用的内容,这可能是因为你没有足够的权限来读取或写入该文件。你可以使用"ls -la"命令来查看文件的权限设置情况。如果你是用root账户权限执行npm命令,那么可能是因为npm默认不适用root权限创建内容而导致权限问题。解决方法是在npm命令中加入参数"--unsafe-perm=true --allow-root",例如"npm install --production --unsafe-perm=true --allow-root",这样就可以解决权限问题了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [OSError: [Errno 13] Permission denied: '/etc/cron.d/1sandbox_registration'](https://blog.csdn.net/weixin_30906671/article/details/96999527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [npm install 报错,提示`gyp ERR! stack Error: EACCES: permission denied` 解决方法](https://blog.csdn.net/biao0309/article/details/90977752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值