crontab执行失败的一些解决办法
crontab介绍
crontab
是Linux和Unix-like系统中用于设置周期性被执行的任务的工具。cron
是一个守护进程,可以定期检查 crontab
文件,并执行其中定义的命令。crontab
文件包含了指令,这些指令告诉 cron
何时运行哪些命令。
crontab
的基本组成如下:
- 分钟(0 - 59)
- 小时(0 - 23)
- 日期(1 - 31)
- 月份(1 - 12)
- 星期几(0 - 7,其中0和7都代表星期天)
一个典型的crontab
任务看起来像这样:
1 | */5 * * * * /bin/echo 'Hello, World!' >> /tmp/cron_output.txt |
这个例子中的任务每5分钟执行一次,运行 echo
命令输出
"Hello, World!",并将其追加到 /tmp/cron_output.txt
文件中。
用户可以通过 crontab -e
命令编辑自己的 crontab
文件。初次使用时会提示选择编辑器,如 vi
、nano
等。保存并退出编辑器后,cron
会自动加载更改。
crontab
还支持使用特定的时间表来执行任务,例如:
0 0 * * *
每天午夜执行0 9 * * 1
每周一的早上9点执行0 22 * * Fri
每周五晚上10点执行
此外,crontab
还允许使用特殊字符来表示时间间隔,如:*
表示任意值,
表示列出枚举值-
表示范围/
表示时间间隔
例如,*/2 * * * *
表示每两分钟执行一次任务。
使用crontab
需要注意权限和安全性问题,确保仅运行必要的任务,并避免运行有潜在风险的命令。同时,crontab
的输出默认会通过邮件发送给用户,因此建议将输出重定向到文件中,以免邮箱被大量日志信息填满。
在ubuntu执行时遇到的一些问题
1. 日志在哪1
linux/mac 下默认日志会在syslog里面。路径:
1 | 路径:/var/log/syslog |
可以通过查看
1 | grep CRON /var/log/syslog |
2. source: not found2
crontab没有执行成功。一般我们会使用source ~/.bashrc来引入环境变量。但发现执行错误:
1 | source: not found |
这是由于在ubuntu下,默认的sh不是bash而是dash。
可以使用下面的命令验证:
1 | $ ls -l /bin/sh |
如果输出是:
1 | /bin/sh -> dash |
说明使用的sh是dash。
接下来就是将默认的shell换成bash
1 | $ sudo dpkg-reconfigure dash |
选择no就可以了。
可以再次使用验证
1 | $ ls -l /bin/sh |
3. XXX: command not found3
python: command not found
scrapy: command not found
...
我们已经成功source ~/.bashrc,但还是发现明明在.bashrc中配置了PATH的命令却还是提示找不到。
这时候可以通过输入完整命令路径解决,如:
1 | /home/cifangyiquan/miniconda3/bin/python main.py |
但这不是问题的根本原因
这个是由于默认的~/.bashrc里,如果不是交互式,则不进行后面的操作,导致一般后面的配置没有生效。需要修改一下.bashrc文件:
1 | 1 # ~/.bashrc: executed by bash(1) for non-login shells. |
修改方法也很简单,注释调第8行的return即可。
1 | 8 # *) return;; |