本文主要介绍如何用shell脚本自动执行py文件 以及我在操作时遇到的各种坑点
介绍一些简单概念 也算给自己做笔记 后面主要是各种坑
什么是shell脚本?
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言.
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务.
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本。
sh文件是脚本文件,一般都是bash脚本。想运行的话可以用sh命令运行:sh xxx.sh 有很多中方式 这里不多赘述
可以用来干嘛?
可玩性很大,比如挂爬虫定时爬取某个网站,定时重启服务器等等很多
我主要是用在自己电脑上 我的电脑一般常开 我想通过ssh远程连接它 因为电脑是通过路由器上网 所以内网地址经常变
我想自动执行别人写的一个Python DDNS脚本来获取内网地址 等稍后有空 会在另一片文章里介绍
在手动执行成功后想使用shell脚本自动执行 遇到了各种坑
具体怎么写脚本以及定时执行网上已经有很多非常完整的教程了 这里主要写我遇到的一些问题吧.
直接说最大坑点
py文件在终端直接运行可以运行 直接执行.sh文件也可以执行 但是!!!通过Crontab和Launchcat自动执行就提示出错!!!一般是提示缺少模块
我用的是Mac os 自动执行一般使用Crontab或Launchcat 两种我都试过了 刚开始都不行
后来扒了好多帖子终于找到原因:自动执行时sh文件 环境变量会出现问题
解决办法:在sh文件里加入source /etc/profile
这行命令即可
ps:我这里刚开始加入后还提示报错,好像是因为编码问题没法输出中文 后来把py文件的中文输出改为英文后成功运行
其他问题:
- 定时任务无法执行:可能是权限问题 可以使用
chmod -R 777 文件路径
- 找不到文件:Crontab Launchcat以及.sh文件中有涉及路径的地方 都用绝对路径
- 定时任务不启动:重启Crontab服务 以及注意Launchcat load与start的区别 load是启动某定时任务 start是立即执行