Tag Archives: Linux

Crontab 笔记

关于 Crontab ,维基百科上的词条 Crontab非常好。可惜这个地址在国内不用代理访问不到。 虽然关于 Crontab 的介绍到处都是,详细读了一遍这个词条,收获还是有的。Crontab 这个名字来自 “chronos”,一个古希腊语, “时间”的意思.

常见陷阱

每个SA、DBA 或者是普通的 Unix 用户,在第一次使用 Crontab 的时候都会遇到问题. 运行 Crontab 的常见错误包括如下几种:

1) 出于测试目的新创建了一条 Cron JOB,

时间间隔必须超过两分钟,否则 JOB 将调度不到。如果必须忽略这两分钟的载入配置时间差,可以通过重新启动 Cron Daemon 做到。

2) 从 Crontab 中启动 X Window 程序需要注意的事项:所以要么在程序前初始化 “DISPLAY=:0.0”, 要么在应用程序后面追加参数 –display :0.0 3) 命令中的 % 必须做转义处理: \% .我个人的意见是不要在命令行里带这个参数,干脆写到脚本里,然后调度该脚本即可。

其实我倒是认为使用 Crontab 最常见的一个问题往往是因为环境变量不对。经常会看到论坛里有人问:为什么我的 Crontab 创建了不执行? 准备创建一条 Cron JOB 的时候,很多人都喜欢在命令行下运行一遍,因为这个时候环境变量是随着 Shell 自动带进来,在 Crontab 中则可能因为找不到正确的环境变量,JOB 就不能执行。这个小问题就像出天花,一次教训之后就都记得了。

必须使用的一则技巧

每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

附: Crontab 的格式说明如下: * 逗号(‘,’) 指定列表值。如: “1,3,4,7,8” * 中横线(‘-‘) 指定范围值 如 “1-6”, 代表 “1,2,3,4,5,6” * 星号 (‘‘) 代表所有可能的值 Linux(开源系统几乎都可以)下还有个 “/” 可以用. 在 Minute 字段上,/15 表示每 15 分钟执行一次. 而这个特性在商业 Unix ,比如 AIX 上就没有.

# Use the hash sign to prefix a comment
# +---------------- minute (0 - 59)
# |  +------------- hour (0 - 23)
# |  |  +---------- day of month (1 - 31)
# |  |  |  +------- month (1 - 12)
# |  |  |  |  +---- day of week (0 - 7) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *  command to be executed

系统级的 Crontab

查看 /etc/crontab 这个文件,可以或者更多系统级别的调度任务。通过这个文件也可以学习一下更好的 Crontab 是怎么定义的。需要留意如下四个目录的东西:

/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

在一个繁忙并且关键的系统上,有的时候这些默认的系统级任务调度会带来一些隐患。需要知晓。

用户添加的 Crontab 实际上存在什么位置呢? 这个实际上是存放在 /var/spool/cron/crontabs 目录下.

或许,你应该通过 man crontab 把整个手册读一遍。

ntpd: can’t open /etc/ntp/drift.TEMP

监控 Linux 服务器的时候,经常在 /var/log/messages 文件中看到类似如下的信息:

fooServer ntpd[7250]: can't open /etc/ntp/drift.TEMP: Permission denied

快速解决:
编辑 /etc/ntpd.conf 文件,找到这一行:

driftfile /etc/ntp/drift

修改为:

driftfile /var/lib/ntp/drift

更多信息参考这里
这个问题最容易在 RHEL 服务器上遇到,碰上两次了,记录一下备忘。
EOF

GNU 核心工具

“说出 10 个 Linux 基本命令?”
这是当年我在毕业求职的时候遇到的一个面试题。没有难度。如果说法换一下,”说出 10 个 GNU 核心命令”,即使我能蒙出来 10 个,怕也会有错误。
GNU 核心工具(GNU Core Utilities)指的是 GNU 操作系统基本的文件、Shell、文本维护工具。

The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. These are the core utilities which are expected to exist on every operating system.

GNU 核心工具 包括 fileutilsShellutilstextutils 三个部分。其中 fileutils 只有 22 个命令,有三个命令我居然从来没有用到过,分别是 mkfifo(Creates FIFOs)、shred(Destroy data in files)、vdir(Long directory listing)。Shellutils 有 35 条命令,其中也有我从来没有注意过的命令,比如 pinky(Lightweight finger);textutils 工具中也有用的极少的工具,而且用的时候也往往有一些坏习惯,textutils 有 26 条命令,注意 VI/VIM 并不在其中。
初学 Unix/GNU Linux 的时候往往觉得老虎吃天,无从下口。这里有个小小的建议:从这个 GNU 核心工具开始,逐步掌握包含的三类几十条命令。对于类 Unix 操作系统你就可以拿出去蒙人了,呵呵,象 Unix 操作系统速成? 这有点像《天龙八部》中鸠摩智学会了小无相功,就能把少林 72 绝技耍的像模像样有些类似。当然,仅靠这一点还不足以行走江湖,有时间咱再继续说。
EOF

RHEL4 上 top 命令的一个小变化

在 RHEL 4 上,默认 top 命令的显示有了一点小变化:如果是 SMP 机器 ,只显示 CPU 的概要信息。
其实很多用户还是喜欢看到 CPU 的细节数据的,要恢复旧的显示习惯,只需要输入数字 1 即可打开到 SMP 显示模式。输入大写的英文字母 I 则显示 Irix/Solaris 模式。
小技巧:在输入 1 后,再输入一个大写的 W 即可在当前用户默认路径下保存一个 .toprc 文件,下次启动 top 命令就不用费事了。
这个变化和 procps 版本有关,还不确定是否是因为 RHEL 的 Bug — 虽然 RHEL 与 procps 相关的 Bug 挺多。
EOF