^M导致的cront任务失败问题

一、现象

应用侧报告cront任务调用执行不成功。
在/var/log/message中发现如下现象:
2003-09-03T01:02:22 .907016+08:00 database1 CRON[144365]:(root)CMD (/back/bbc/backup.sh^M)
2003-09-03T01:02:23 .903736+08:00 database1 CRON[144654]:(root)CMD (/back/dbd/backup.sh^M)
2003-09-03T01:02:24 .90e873+08:00 database1 CRON[144225]:(root)CMD (/back/ebb/backup.sh^M)
2003-09-03T01:02:28 .903876+08:00 database1 CRON[143665]:(root)CMD (/back/cdc/backup.sh^M)
2003-09-03T01:02:29 .907226+08:00 database1 CRON[144236]:(root)CMD (/back/abd/backup.sh^M)

二、结果

cront任务无法执行完成,无任何效果。

三、解析

结合现象中的日志可发现与正常日志的不同之处在于每行后面都多出了一个^M符号。因为在Linux中这个符号是由于dos下的回车符所产生,在Linux中体现为 ^M。所以crontab文件在由windows下编辑完成后,一定要经过转化,Linux才能正确的执行。
转化方法详见这位大拿的文档:http://blog.chinaunix.net/uid-7530389-id-2050029.html
他写的也是和cront有关。
经过重新编辑crontab文件,现象恢复正常。cront任务成功执行。问题解决。当然这只是cront任务不能成功执行的原因之一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1]; } flights[i].passenger_count--; flights[i].available++; printf("退票成功!\ncrontab 是一个在 Linux 和类 Unix 操作系统中用于定期执行任务的工具。它的工作原理"); return; } else { printf("座位号不正确!\n"); return; } } 是在指定的时间和日期自动运行程序或命令。 crontab 定时任务的机制是通过在 } printf("没有找到该乘客!\n"); return; } } printf("没有找到该 crontab 文件中设置定时任务来实现的。这个文件通常位于 /etc/crontab 或 /var航班!\n"); } ``` 7. 保存所有信息到文件功能 ```c // 函数:save_to_file /spool/cron/crontabs 目录下,每个用户都可以创建自己的 crontab 文件。 每行 cront// 功能:将所有信息保存到文件中 void save_to_file() { FILE *fp; int i, j; fp = fopen("flight.dat", "w"); if (fp == NULL) { printf("文件打开失败!\n"); ab 文件包含了一个定时任务的详细描述,由五个空格分隔的字段组成: ``` * return; } fprintf(fp, "%d\n", flight_count); for (i = 0; i < flight_count; * * * * command ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ └───── 命令或脚本 │ │ │ └─────────── 日(0 - 6) │ │ └──────────────── 小时(0 - 23) i++) { fprintf(fp, "%s %s %s %d %d %d\n", flights[i].number, flights[i].│ └──────────────────── 分钟(0 - 59) └───────────────────────── 秒(0 - 59)可选 departure, flights[i].destination, flights[i].capacity, flights[i].available, flights[i].passenger_count); for (j``` 每个字段表示一个时间单位,从左到右依次表示:分钟、小时、日、月、周几。 = 0; j < flights[i].passenger_count; j++) { fprintf(fp, "%s %s %s %d\n其中,* 表示任意值,数字表示指定的值,多个值使用逗号隔开,范围使用“", flights[i].passengers[j].name, flights[i].passengers[j].id, flights[i].passengers[j].flight, flights-”表示,步长使用“/”表示,例如: - `*` 表示任意值,如 `* * *[i].passengers[j].seat); } } fclose(fp); printf("保存成功!\n"); } ``` 完整代码如下:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi~9527

看我这么卖力,可怜可怜我吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值