在mac和ubuntu上使用crontab,包括遇到的问题分析

crontab是一个定时任务工具,一般不需要安装,类unix系统里都自带了。 这里不过多介绍,只记录遇到的问题。

简单的使用例子

目标:每分钟调用a.sh,每分钟执行一次,查看当前时间并写入run.txt文件。

  1. crontab -e创建一个任务,标记为每分钟执行一次。
javascript 复制代码
* * * * * /bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
  1. a.sh的内容:
bash 复制代码
 #!/bin/bash
chmod 777 /home/yocn/crontab/run.txt
echo `date`  >> /home/yocn/crontab/run.txt
  1. 查看服务是否运行

ubuntu上是service cron -l mac上是sudo launchctl list | grep cron

  1. 开启service

ubuntu上使用service cron start,有的linux上可能是service crond start。 mac上则是sudo /usr/sbin/cron start

mac上的crontab很好用,一般上面的做完就直接能运行了,ubuntu上则比较费劲。

在使用crontab的时候感觉它就像一个黑盒,属于干啥都没反馈,配置上了没反应,也没有错误提示。主打一个打不还手,骂不还口,主打一个无招胜有招。 所以下面介绍如何开启日志,查看错误log。

开启ubuntu上crontab的错误日志

  1. 修改sudo vim /etc/rsyslog.d/50-default.conf
javascript 复制代码
# First some standard log files.  Log by facility.
#
auth,authpriv.*			/var/log/auth.log
*.*;auth,authpriv.none		-/var/log/syslog
#cron.*				/var/log/cron.log
#daemon.*			-/var/log/daemon.log
kern.*				-/var/log/kern.log
#lpr.*				-/var/log/lpr.log
mail.*				-/var/log/mail.log
#user.*				-/var/log/user.log

把这一行cron.* /var/log/cron.log打开。

rsyslog是linux系统中用来实现日志功能的服务。默认已经安装,并且自动启用。它的作用是主要用来采集日志,不生产日志。

  1. service rsyslog restart重启rsyslog。

  2. cat /var/logs/cron.log查看日志

查看日志,填坑

  1. 最常见的错误,No MTA installed, discarding output
bash 复制代码
Jan  9 11:20:01 yocn-MECHREVO CRON[26176]: (yocn) CMD (/bin/bash /home/yocn/crontab/a.sh)
Jan  9 11:20:01 yocn-MECHREVO CRON[26173]: (CRON) info (No MTA installed, discarding output)

MTA(Mail Transfer Agent):英特网邮件传输代理,转发来自MUA的信件给指定的用户的程序。

如果没有邮件的需求,可以通过添加一个重定向的文件来解决, 比如:

bash 复制代码
# 空输出null
/bin/bash /home/yocn/crontab/a.sh > /dev/null 2>&1
# 或者你自己系统上的一个目标文件,比如下面的/home/yocn/crontab/out.log
/bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
  1. 改了之后发现还是不work,再check一下路径和权限。

路径最好使用绝对路径并检查权限,这里包括crontab里面配置的重定向的文件和a.sh里记录执行的log文件。 chrontab来调用shell比较特殊,随时check新添加或者修改的目标文件是否有权限运行。

ruby 复制代码
yocn@yocn-MECHREVO:/etc/rsyslog.d$ /bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
/home/yocn/crontab/a.sh: 行 3: run.txt: 权限不够
yocn@yocn-MECHREVO:/etc/rsyslog.d$ /bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
chmod: 无法访问 'run.txt': 没有那个文件或目录
/home/yocn/crontab/a.sh: 行 3: run.txt: 权限不够
yocn@yocn-MECHREVO:/etc/rsyslog.d$ /bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
yocn@yocn-MECHREVO:/etc/rsyslog.d$ service cron restart

可以在调用之前给加一下权限。

  1. 记得修改完之后调用 service cron restart

参考连接: blog.csdn.net/lifulian318...

相关推荐
Cat_Rocky19 分钟前
keepalived简单配置
linux·运维·服务器
开开心心就好25 分钟前
一键扫描电脑重复文件的实用工具
linux·运维·服务器·随机森林·智能手机·excel·启发式算法
charlie11451419125 分钟前
AwesomeQt:最小的Qt6系列迷你版本教程发布!
linux·c++·qt·c
嵌入式×边缘AI:打怪升级日志1 小时前
Tina SDK Linux Kernel 基本使用(实战篇:为开发板添加用户按键驱动支持)
linux·运维·服务器
瞎折腾啥啊2 小时前
VCPKG详细使用教程
linux·c++·cmake·cmakelists
爱莉希雅&&&2 小时前
MySQL MGR + MySQL Router 高可用集群完整笔记(含手动配置 + Shell 接管双路线)
linux·数据库·笔记·mysql·mysqlrouter·mysqlshell
楼田莉子2 小时前
仿Muduo的高并发服务器:LoopThread模块及其ThreadPool模块
linux·服务器·c++·后端·学习
南境十里·墨染春水3 小时前
linux 学习进展 网络编程 ——TCP 协议 TIME_WAIT 状态详解
linux·网络·学习
Qt程序员4 小时前
【无标题】
linux·c++·消息队列·共享内存·c/c++·管道·信号量
相国4 小时前
在Windows里通过WSL安装Ubuntu 22.04
linux·windows·ubuntu·wsl