Linux(Ubuntu)定时提醒/执行任务

本文介绍如何在Linux系统中利用notify-send和crontab实现自动定时提醒及任务自动化,包括发送桌面通知、设置周期性任务及环境变量配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们需要一些自动定时提醒或者每天下班自动执行备份,定期自动重启某些服务清理某些缓存时,如何在大Linux上使用几句shell命令完成实现这份任务的自动化呢? notify-send和crontab的结合就可以轻松实现定时执行,自动弹出通知提醒等。

shell命令notify-send

 程序包libnotify-bin为X桌面系统提供了向桌面发送通知的功能,Ubuntu 9.04之后已经自带该功能,其它Linux发行版根据具体情况先安装,ubuntu安装示例:
apt-get install libnotify-bin
使用notify-send命令介绍如下(man notify-send命令查看):

http://manpages.ubuntu.com/manpages/gutsy/man1/notify-send.1.html

 notify-send "NotifyTest" "I am a test notification."
 notify-send "Notification Title" "The message body is shown here" -i /home/jokerlee/icon.png -t 1000 

使用NotifyOSD定制Ubuntu 14.04的通知行为,打造更酷炫多样的通知形式
参考> http://imcn.me/html/y2014/19785.html

Linux crontab命令

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的任务计划表。
crontab -r : 删除目前的任务表 
crontab -l : 列出目前的任务表 
crontab -e : 执行文字编辑器来设定任务表

crontab编辑查看示例

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute   hour   day   month   week   command
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

Crontab文件内命令和脚本的编写

有时我们加入crontab内的任务无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。

例如工作日每天十点提醒到OA系统去做一些签到预订什么的例子如下:

 * 10 * * 1-5 . /home/jokerlee/notify_dinner

脚本示例

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)"
export DISPLAY=:0

因为执行GUI程序需要提供DISPLAY环境变量,而ubuntu 14.04根据资料还需要提供DBUS_SESSION_BUS_ADDRESS environment variable
具体原因可以查看stack overflow上大神的回答 > http://askubuntu.com/questions/298608/notify-send-doesnt-work-from-crontab/346580#346580

PS:

crontab新增的任务需要重启cron服务才会立即生效
ubuntu重启命令:
    sudo service cron restart 
    sudo /etc/init.d/cron start

更多发行版的cron服务启动> http://www.cyberciti.biz/faq/howto-linux-unix-start-restart-cron/

cron服务执行每一条任务都会将输出信息通过电子邮件的形式发送给当前系统用户或者记录在系统日志/var/log/syslog(ubuntu 14.04,同样查看该文件可以知晓加入的定时任务是否正常按时运行),这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。
可以在crontab文件中设置如下形式,忽略日志输出:
0 /3 * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

参考资料

crontab更详细的使用介绍:

http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

notify-send与inotify的结合使用:
http://www.baozy.com/archives/12084.html

<think>好的,用户想知道怎么看Linux定时任务执行记录。首先,我需要回忆一下Linux定时任务通常是通过cron来管理的,所以执行记录应该是在系统日志里。可能是在/var/log/syslog或者专门的cron日志文件,比如/var/log/cron,不过不同发行版可能路径不同,比如Ubuntu可能是在syslog里,而CentOS可能有单独的cron日志。 接下来,用户可能需要知道如何查看这些日志,常用的命令应该是grep过滤出相关的cron信息。例如使用cat、tail或者journalctl,具体取决于系统是否使用systemd。比如,用grep CRON /var/log/syslog可以查看Ubuntu上的cron日志。 另外,如果用户想看自己的cron任务记录,可能需要检查用户级别的日志,或者查看是否有MAILTO环境变量设置,因为cron默认会发送邮件到用户账户,可能存储在/var/mail/username里,可以用mail命令查看。 还有可能用户的问题涉及到检查某个定时任务是否执行成功,这时候可能需要看日志中的具体时间戳和退出状态码。或者用户可能遇到定时任务没有执行的情况,需要排查问题,这时候需要检查日志中的错误信息,比如权限问题、路径问题或者命令不存在等。 需要提醒用户注意权限问题,查看系统日志可能需要root权限,所以可能得用sudo。另外,如果日志文件太大,可以用tail -f实时监控新产生的日志,方便调试。 可能还需要提到logrotate,因为日志文件可能会被轮转压缩,旧的日志可能在/var/log/syslog.1这样的归档文件中,或者用.gz压缩,这时候需要用zcat或zgrep来查看。 总结下来,步骤应该是:确定日志位置,使用grep过滤cron相关的条目,检查执行时间和结果,以及可能的错误信息。另外,补充邮件通知和权限方面的注意事项,帮助用户全面了解如何追踪定时任务执行情况。</think>在Linux系统中,定时任务(如cron任务)的执行记录主要通过系统日志查看,具体步骤如下: --- ### 一、定位日志文件 #### 1. 系统级日志路径 - **通用路径**:定时任务日志通常存储在 `/var/log/syslog` 或 `/var/log/cron` ```bash # Ubuntu/Debian grep CRON /var/log/syslog # CentOS/RHEL grep CRON /var/log/cron ``` #### 2. 使用 `journalctl`(systemd系统) 若系统使用 `systemd`,可通过以下命令查询: ```bash journalctl -u cron.service --since "2023-01-01 00:00:00" ``` --- ### 二、查看日志内容 #### 1. 基础过滤 通过 `grep` 过滤关键词(如任务用户名、命令名称): ```bash grep "CRON" /var/log/syslog | grep "root" ``` #### 2. 实时监控日志更新 使用 `tail -f` 动态查看最新日志: ```bash tail -f /var/log/syslog | grep CRON ``` --- ### 三、理解日志格式 一条典型记录示例: ``` May 10 15:30:01 ubuntu CRON[1234]: (root) CMD (echo "Task executed" > /tmp/log.txt) ``` - **字段解析**: - `May 10 15:30:01`:执行时间 - `ubuntu`:主机名 - `CRON[1234]`:进程ID - `(root)`:执行用户 - `CMD (...)`:具体执行的命令 --- ### 四、检查任务执行状态 #### 1. 成功执行 日志中会显示完整的命令记录,无错误提示。 #### 2. 执行失败 若任务失败,日志中可能包含错误信息: ``` May 10 15:30:01 ubuntu CRON[1234]: (root) ERROR (Failed to open file) ``` --- ### 五、其他排查方式 #### 1. 邮件通知 - cron默认会将输出通过邮件发送给用户(需配置邮件服务),检查邮件: ```bash mail -f /var/mail/$USER ``` #### 2. 手动记录日志 在cron命令中追加输出重定向,自定义日志路径: ```bash # 示例任务(将标准输出和错误输出写入文件) * * * * * /path/to/script.sh >> /tmp/cron.log 2>&1 ``` --- ### 六、常见问题 1. **无日志记录?** - 检查 `/etc/rsyslog.conf` 是否启用 `cron.*` 日志 - 重启服务:`systemctl restart rsyslog` 2. **权限不足?** - 使用 `sudo` 查看系统日志: ```bash sudo grep CRON /var/log/syslog ``` --- 通过以上步骤,可清晰追踪定时任务执行记录及状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值