crontab基础知识
Crontab格式:
* * * * * command
5个*分别对应
分、时、月、日、星期(周日是0)
* * * * *
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
示例:
每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
查找crontab文件位置
which crontab
查看crontab文件内容
crontab -l
编辑crontab
crontab -e
设置每隔一分钟执行命令
*/1 * * * * python /root/print1.py
启动cron服务
sudo service cron start
重启cron服务
serice cron restart
停止cron服务
service cron stop
WSL Ubuntu crontab不生效问题排查
1.crontab文件位置
/var/spool/cron/crontabs/${USER}
如root用户,crontab文件位置在/var/spool/cron/crontabs/root
运行which crontab
可以看到是/usr/bin/crontab
2.检查contab是否正在运行
service cron status
service cron start
service cron reload
ps aux | grep cron
3.crontab日志文件位置
/var/log
发现这个目录不存在crontab日志
打开文件/etc/rsyslog.d/50-default.conf
下面这一句取消注释:
cron.* /var/log/cron.log
重启rsyslog:
service rsyslog restart
报错rsyslog: unrecognized service
这个问题有待进一步确认
安装rsyslog
sudo apt-get install rsyslog
查看rsyslog版本
rsyslogd -v
查看rsyslog状态
sudo service rsyslog status
4.环境变量
which crontab
可以看到crontab属于/usr/bin/crontab
使用export语句添加环境变量
# 加到PATH开头
export PATH=/usr/bin:$PATH
放到PATH已有值的前面,如果遇到同名的命令,PATH里面哪个目录先被查询,则那个目录下的命令就会被先执行
查看环境变量:
env
保证永久有效:
/etc/profile
文件添加语句 export PATH=/usr/bin:$PATH
重启执行命令
service cron status
source /etc/profile
service cron reload
5.另一个crontab文件位置
/etc/crontab
PATH所在的行,取消注释
在文件中添加命令
0 9 * * * cd /${USER}/interface;python main.py
打开/etc/init.d目录,其中存在cron文件
启动cron服务
启动:/etc/init.d/cron start 关闭:/etc/init.d/cron stop
重启:/etc/init.d/cron restart 重新载入配置:/etc/init.d/cron reload
查看crontab的PID
pgrep cron
6. 查看所有crontab的位置
whereis crontab
可以看到/usr/bin/crontab /etc/crontab /usr/share/man/man1/crontab.1.gz /usr/share/man/man5/crontab.5.gz
在/usr/bin/crontab添加命令
0 9 * * * cd /${USER}/interface;python main.py
/usr/sbin/cron
/usr/local/bin/crontab
7.添加用户到crontab组
#add your user to crontab group
usermod -a -G crontab MyUser
8.enable systemd in WSL
/etc/wsl.conf文件中添加如下语句,如果不存在,创建文件
[boot]
systemd=true
在powershell运行如下命令:
wsl --terminate Ubuntu
wsl -d Ubuntu
确认systemd是否运行
systemctl list-unit-files --type=service
确认cron是否运行
systemctl status cron
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。