Cron简介
Cron是Unix和类Unix操作系统(如Linux)中的一种工具,用于在特定时间执行预定的命令或脚本。Cron是一个守护进程,一旦系统启动,它就会一直运行。
Cron的主要优点是,它允许系统管理员安排在固定时间、日期或间隔执行的作业。例如,你可以设置一个作业,每天凌晨3点备份所有用户的主目录。
Cron使用一个配置文件,称为crontab(cron table)文件。每个用户都可以有自己的crontab文件,而系统管理员则可以使用/etc/crontab文件来设置系统级的作业。
Crontab文件的每一行都代表一个作业,包含了作业执行的时间和日期信息,以及要执行的命令或脚本。时间和日期信息的格式是:分钟(0-59),小时(0-23),每月的某天(1-31),月份(1-12),每周的某天(0-7,0和7都代表星期日)。
例如,下面的crontab条目将在每天凌晨3点30分执行/home/user/backup.sh脚本:
30 3 * * * /home/user/backup.sh
Cron还提供了一些特殊的字符串,如@reboot(每次启动时运行)、@yearly(每年运行一次)、@monthly(每月运行一次)、@weekly(每周运行一次)、@daily(每天运行一次)、@hourly(每小时运行一次)。
## Cron无法运行Python脚本问题
我遇到的问题,为了避免边缘设备断电或摄像头偶尔断开连接导致python脚本无法正常运行拉流,我利用容器运行整个流程,将容器设置为自启,同时利用Cron服务定时运行拉流的脚本。但是问题就来了,Cron无法运行这个python脚本,其间考虑过各种原因,比如宿主机和容器的linux发行版本不一致,Cron服务安装失败等,最终确定原因是"**Cron运行命令时的环境或这说上下文与shell不是一样的**",以下是纠错过程。
crontab文件中的命令如下:
```bash
* * * * * bash /path/to/main.sh
```
main.sh中如下:
```bash
python3 /path/to/test.py
```
test.py导入了mariadb包,因为需要操作数据库。
启动Cron服务后,利用 ps -ef 命令并没有显示有任何拉流进程,但是并没有报错,这一点迷惑了好久,可能这就是Cron的机制吧,能运行就运行,不能运行就不能,至于什么原因报什么错,不会有任何反馈