Archive for June, 2006

在debian下解决时间同步的问题

Thursday, June 22nd, 2006

在debian下解决时间同步的问题

在前几天的文章debian下如何修正系统时间中me 提到了时间同步存在的问题,虽然不大影响使用,但麻烦可是够麻烦的。因为系统在启动后登录gdm前的时间是错的,为了使debian系统在log时不发生 时间错乱,me只好按下alt+f1之类的键,进入cli更改系统时间,然后再用gdm登录,否则就会有8个小时的误差。要知道时间和空间是物理和哲学的 两大基础,对任何事情都有着不小的影响,时间错乱可千万是要不得。问题还是得想法解决。

学习了ntpdate的用法后,me用自己掌握的有限的shell编程知识弄了个脚本,并通过crontab进行调用,每个小时同步一次,保障时间是准确的。脚本内容如下:

garden:~/bin# cat ntpupdate
#!/bin/sh
/usr/sbin/ntpdate time.nist.gov | logger -t NTP
/sbin/hwclock -w
然后crontab -u root -e,把这个工具加入到自动运行的机制中,内容如下:

garden:~/bin# crontab -u root -l
# m h  dom mon dow   command
3 * * * * /root/bin/ntpupdate
通过这种方式,登录后不超过一个小时,debian会使用ntpdate工具自动和internet上的时间服务器同步,呵呵,爽啊,现在每次对时间me 都要看看debian的系统时间,因为这个是最准的嘛。但仍是有问题没有解决,那就是在该脚本自动按照一定的周期同步之前的时间仍然是错误的,也就是说提 前了8个小时。

实在没有办法了,me突然想:难道是cmos中的时间设置错了。重新启动,按下del进入cmos设置界面,看时间居然是好的。这说明问题就出现在debian启动的过程中。

google了下,学习了不少关于debian类似的linux操作系统的启动过程。先调用/etc/rcS.d目录下的所有脚本,然后再根据 runlevel确定执行/etc/rc*.d下的脚本。在rcS.d目录下找到ntpdate的链接,看来安装了ntpdate后它自动会把自己加入启 动脚本组的。

通过分析,有两种可能导致时间错乱:debian启动时对系统时间根据时区设置进行了处理,但是错了,另外就是在这种情况下后来的修正工具(ntpdate)未能发挥作用。

仔细查阅rcS.d,发现有几个hwclock相关的脚本。用lynx查看,不知其所以然。后来想,还是得通过ntpdate解决问题为上策。不管前面如何处理,只要ntpdate起了作用,那时间就不会在debian系统启动的过程中错掉。

再次启动系统,死盯着快速闪过的一行行启动信息,突然看到了ntpdate的提示语句,好像是说域名解析暂时无法使用。嘿,问题就在这里了。

man ntpdate;找到了ntpdate的配置相关文件,分别是/etc/init.d和/etc/default目录下的ntpdate,其他如 rcS.d下的仅仅是链接而已,只要前两个改好了,其他都会好的。在配置文件中发现了它设定时间服务器为pool. ntp.org,me对此域名执行ping命令,把得到的ip“207.210.74.166
”对域名进行替换。虽然感觉心里还是没底,但觉得好像是找到了问题的关键。

重新启动,debian在运行ntpdate的时候稍微停了一下,哈哈,看来是好了。进入系统,果不其然,时间终于正确了。世界从此清静。

下次有时间得仔细研究研究为什么在运行ntpdate的时候域名解析居然还没有设置好。

Technorati Tags: , , ,

说说cvs的本地化管理(五)

Thursday, June 22nd, 2006
说说cvs的本地化管理(五)

下午上网去找那个sh.exe。到cygwin网站http://cygwin.com瞄瞄才知道,这个玩意儿好像知名度还挺高的,只是原来me不知道而已,嘿嘿。粗粗浏览一下网站,发现好像要安装整个cygwin才行,bash、sh之类的是其中的组件。其实说穿了,cygwin就是个能在windwos环境下支持unix、linux工具运行的模拟器
在其主页上点击install now,下载了一个两百多K的setup.exe。这么小!霍霍……点击运行才发现原来没有这么简单,因为安装界面中出现了download安装库的提 示,已经到了这一步那就继续吧。出现选择境像服务器的选项,先选了一个ftp,没有反应,后来才意识到可能是me在局域网内部的问题。其它专业的ftp工 具me平常都不能用,在这里对ftp进行操作应该也是没戏的,呵呵。选择了一个http的服务器进行,果然开始下载了。怎么?只有六十多K!很快就下载完 了,又出现了一个窗口,晕,好复杂,是个选择安装什么组件的窗口。真是一波三折哟!
me完全不懂它的运作机制,怎么会知道该选择哪些组件呢!就默认吧。next,继续,开始下载。搞了好半天,me一看进度,才4%;查看 下载的目录的大小,已经有了12M。掰指头算了算。哇,即使是默认安装也需要下载近300M的东东啊!看着龟速挪动的进度条,me只好让这里继续下载的同 时再找其它办法咯。

祭出google大法。嗨,找到了提供cygwin本地安装版本的下载地址。其中一个只有40多兆,地址为http://ks.onlinedown.net/down/Cygwin0528.rar当然是它了。找到蚂蚁下载,十分钟就完成了。安装成功!
可不能忘记要它是作什么的哟。赶紧运行NetBean,到version control的设置窗口,设定bash的路径(就在cygwin安装目录下的bin中)。点击ok,哈哈,这次终于没有出错提示了。init,成功。然 后从cvs的repository中checkout了388ablum模块。呵呵,好像行了。具体的便利又得靠me慢慢摸索了,呵呵,不过还是高兴 啊……
 再岔开说说cygwin 吧。把安装目录下bin放在了系统路径中,下面为数众多的unix工具都可以运行,晕,厉害呀。不过除了ls外其它的命令me都不知道是干什么的,嘿嘿, 以后慢慢学吧。用teleport把cygwin的主页拉到硬盘上,初步看了一下,功能真多。cygwin应该是个可以在windows下运行的模拟 unix环境的虚拟环境!
因为完全按照NetBean的help中所说,设定工作目录,init,然后checkout。结果checkout出来的并不是me正 在工作的版本!可能是me对cvs的命令还没有用熟的原因吧,但这样可不行啊,毕竟最终还是要回到目前的工作上来。把repository目录备份后,小 心翼翼的把NB下版本控制中的working directory设置为当前目录,呵呵,成了,在版本控制板块中显示出当前工作的版本和状态。随后对几个文件做了些改变用来测试,在版本控制模块中操作 成功,基本和wincvs中操作是一样的,甚至更方便。 比如添加文件在wincvs中就不是很方便,对没有进入 repository的新文件,在wincvs的浏览器中根本就不能显示,需要把文件名称记好再操作add、commit等命令;但是在NB的cvs中就 可以直接显示并选中直接执行add、commit操作,呵呵,爽。这下终于搞定。不过以后还得深入学习cvs的强大功能^_^

Technorati Tags: , , ,

说说cvs的本地化管理(四)

Thursday, June 22nd, 2006

说说cvs的本地化管理(四)

最后通过完全和NB无关的方式实现了程序的版本管理,应该算是一种迂回。通过几次试验操作,现在已经基本能够实现版本管理的一些基本功能,但对分支管理、版 本融合以及目录移除添加还没有完全掌握,只能留待以后在需要的时候补充学习了。虽然已经能够使用这个功能,但对NB支持cvs而只能通过外部方式实现的现 状耿耿于怀,NB既然实现了此功能,不把它发挥出来岂不可惜!不死心,晚上又试了试Mounting Version Control,这次NB好像能够识别出me已经正在使用的repository,因为cvs.exe的路径已经放在系统路径中了,设置了work directory后直接finish。哦赫,和以前一样,又出错了:

the following command failed exectue in the system:
sh.exe -c cd “”D:\mycode\0wrkdir\j2me_other///.”"&&   “”cvs”" -d “”:local:”"  -f status -l

气愤,马上把它unmount。回到设置窗口仔细研究,在use command line cvs client选项中unix shell中显示tips为“unix shell for windows 95/98/ME”,其默认值是sh.exe。想到出错的不能执行的命令,难道是这里的问题?!

拿那个tips的内容在帮助系统中搜了一下,嘿嘿,果不其然,居然找到了这么一条:

VCS Support on Windows 95, Windows 98, and Windows ME,即在win95、98、ME下的vcs支持,内容中是这样说的:Windows 95, Windows 98, and Windows ME do not have a command shell that enables the IDE to work with command-line version control systems. Before you can use a command-line version control system with the IDE on these systems, you need to install a UNIX shell to interpret the commands. The sh.exe and bash.exe programs, which are available from Cygwin at http://sources.redhat.com/cygwin/, are both suitable for this task.
呵呵,原来如此。看来me要上网搜个sh.exe来装装看咯。

Technorati Tags: , , ,

说说cvs的本地化管理(三)

Thursday, June 22nd, 2006

说说cvs的本地化管理(三)

初步掌握了cvs的命令行用法后me又回到了wincvs,也就是windows版本的图形化的cvs。因为基本原理已经比较清楚,这下看着 wincvs 下的各种菜单、按钮不再感到陌生,呵呵。先导入了昨天试验用的项目,运行基本正常(也就是能正确显示出和命令行工具一样的结果),然后把手头的两个项目也 倒进去了,随后就是在NetBean中把该project中心mount。OK,wincvs和NB终于可以联合使用了,应该说在工具操作方面有上升了一 个台阶,对软件开发的益处是显而易见的,但具体有多大帮助可能要完全取决于me的编程功力的提高,呵呵,再好的工具放到菜鸟手里也发挥不出威力!
因为wincvs暂时能够满足me的需求,再说也确实想停停手在j2me上花点功夫,所以ant的使用就过段时间再学^_^
!!!使用工具前对其功能进行全面的了解是非常有必要的;看帮助文件是必须的,不管有多累;多用网络搜索,会有意想不到的收获;要有坚不可摧的决心。

Technorati Tags: , , ,

说说cvs的本地化管理(二)

Thursday, June 22nd, 2006

说说cvs的本地化管理(二)

六、从项目中删除文件。
1、操作步骤和添加的操作差不多,差别在于add改为remove,相同之处在于都需要再commit一次。
2、注意把工作目录下的文件也做相应删除。
3、!!!CVS只是删除了当前版本的指定文件,它以前的版本依然存在,除非它恰好仅有1.1版本。
4、!!! 删除目录的方法就是删除目录下的所有文件。用户不能直接删除目录本身,目前CVS中也没有方法可以办到这一点。可以在cvs update或cvs checkout命令中使用-P选项来让CVS删除工作目录中的空目录 (注意cvs export命令总是删除空目录的)。可能最好的办法就是每次在上面的命令中指定-P选项。如果用户希望在工作目录中保留一个空目录,将不得不在该目录中 随便放一个文件 (例如放一个.keepme)文件来防止它被带-P的命令删掉。
 七、设定特定版本号。
1、程序稍具规模,相对比较成熟的时候,可以给所有的代码设置为某个版本的标签。
2、cvs tag test_1,默认递归对子目录进行操作 取出该版本的命令为cvs checkout -r test_1 sound,在当前目录下生成sound子目录并放置所有标记为test_1的代码。
 八、更新当前目录下的文件。
1、命令开关为update,主要用于多用户操作时的同步。
2、对单用户可以通过-j命令实现不同版本的合并。cvs update -j 1.8 -j 1.2,可以忽略自1.2版本到1.8版本所做的改变。
 九、分配版本号。
1、把所有的文件(包括那些没有被修改的文件)更新到3.0版本,你可以调用以下命令: cvs commit -r 3.0
  2、!!!新的版本号必须比现有所有文件的最大版本号还要高。
 十、分支管理。
1、如果正在开发某个高版本,低版本出了问题,不想放下高版本的工作,这时候可以设置分支,并对低版本进行修订;修订工作结束后还可以和现有的高版本进行融合。
2、基于当前工作拷贝建立分支。cvs tag -b rel-1-0-patches
3、也可以直接在源码库中基于某个版本或者标签建立分支。cvs rtag -b -r rel-1-0 rel-1-0-patches tc,注意使用的rtag命令。
4、融合该分支所做的改变到当前工作目录。cvs update -j branchname;cvs commit

Technorati Tags: , , ,

说说cvs的本地化管理(一)

Thursday, June 22nd, 2006
说说cvs的本地化管理(一)

昨晚闹腾到三点钟都没有解决问题。仔细查阅了帮助文件,找到了这个方面的内容:如果提供cvs命令行工具的话,通过一定的设置,是可以支持本地化的版本配置管理的。兴冲冲的去试
过程如下:
1、安装了wincvs12,目录中有cvs.exe命令支持命令行运行;
2、在NB update中心下载了cvs模块并加载;
3、菜单中出现版本控制的选项,选mount version control,出现设置对话框,选cvs的profile,并设置类型为local(如帮助所提示),然后依次设置working path和reporisty,确定。
4、init,正常;checkout,正常;但是,进行commit操作时提示bad command or filename;然后无论进行其它任何操作如add、remove等都出现此错误提示;
5、再次对cvs profile进行设置,手动设置cvs路径,以及unix shell的解释器为command.com,问题依旧。

04-9-29 13:48

中午上网查询,首先在中国java网发帖求助(http://www.cjsdn.net/post/view?bid=7&id=114488&sty=1&tpg=1&age=0),光靠别人可不行,于是me就用google搜,呵呵,有用的真不多呀。不过看到了一个有用的,用CVS来管理自己的程序(http://www.fanqiang.com/a6/b9/20010809/1500001096.html)。
一、初始化环境并设置repository。
1、 如法炮制,me首先设置了环境变量(说明一下,me的win98),在dos窗口中set CVSROOT=E:\MYDATA\repst\CVSROOT,然后运行set查阅变量已经设置好;谁知道运行cvs init的时候出了问题,出错提示“CVS.EXE [init aborted]: no such host E”。在例子中的os都是unix或者linux,路径如/user/CVSROOT之类,难道cvs不支持windows的路径系统?!
2、找到cvs.hlp帮助文件,翻啊翻啊,翻的累死了,终于在Node: Repository中发现了这么一句:But if (under Windows NT, for example) your local repository is c:\src\cvsroot, then you must specify the access method, as in :local:c:\src\cvsroot.呵呵,原来还有这么一说!随后为了查询repository的中文意思(汗!),结果用google发现了cvs帮助的中文版本(http://cvsdoc-zh.gro.clinux.org/cvsdoc/zh_CN/html/Repository.html#Repository),呵呵,可见互联网是个好东东!
3、好,言归正传,运行cvs -d :local:E:\MYDATA\repst init,什么提示都没有,查阅一看,多出了一个CVSROOT的目录,下面有好多文件,可见init已经成功了,哈哈,终于前进了一步。
二、导入一个例子项目到cvs中去。
1、进入该项目所在的目录E:\MYDATA\JAVAPRO\sound;
2、 然后运行cvs import -m “start my project: sound” sound heart5 start,哟乎,不好,那个该死的“no such host E” 居然又出现了!!!晕死!难道working directory也需要使用:local方式存取,试了好久,总是不成功。
3、没有办法,只好求助于google。这次很惨,用关键词“cvs import “no such host””搜索居然没有中文的结果,连e文的也只有21条且几乎无用。回头再找那个中文帮助文件中的“告诉CVS源码库放在哪里”部分(http://cvsdoc-zh.gro.clinux.org/cvsdoc/zh_CN/html/Specifying-a-repository.html#Specifying%20a%20repository),觉得可能是环境变量CVSROOT的问题。
4、 哈哈。调试成功,命令为cvs -d :local:E:\MYDATA\repst import -m “start my project:sound” sound heart5 start,运行后显示No conflicts created by this import,到CVSROOT下看,已经设置了一个sound目录并且存放的文件都已经被cvs接管了,因为各个文件都被打上了cvs的标记,比如 branch、log之类的标签。
5、???美中不足的是连已经编译的class文件都import了。按道理应该有过滤选项的,下次再试吧。
 三、从CVS中导出项目。
1、把源sound文件夹备份后删除。
2、 新建一个wrktmp的目录,进入该目录,运行cvs checkout sound。哇,那个“no sunch host E”又出现了。这次可不怕,添加定位repository的命令cvs -d :local:E:\MYDATA\repst checkout sound,OK,正常了。
3、查看wrktmp目录,下面多了个sound目录;进入,里面是刚才导入的文件,不过多了个子目录cvs;进入cvs,里面有三个文件,Root、Repository、Entries。
4、!!! 每次都要手动输入-d指定repository的位置真挺烦的。能不能设置环境呢?!试了一下,成功。设置环境为set CVSROOT=:local::E:\MYDATA\repst 试运行cvs checkout sound,系统提示“CVS.EXE checkout: Updating sound
”,应该是成功了,呵呵。

四、保存修改到CVS中。
1、对其中一个原文件做了修改,添加了一个函数。
2、运行cvs commit  -m “add a function”,显示成功,刚才改变的文件的版本号变成了1.2。
五、添加文件到项目中。
1、从其它地方拷贝过来一个java文件。
2、cvs add About.java,显示添加成功,并提醒要用commit功能才能完全加入;cvs commit About.java,弹出注释文本提醒(此处自动打开记事本),录入注释信息,完成添加操作。
3、!!!添加文件,运行add后还需要commit,才算真正签入源码库。
4、???添加一个目录时好像有些问题,暂时不能正常操作,具体表现为目录下的文件不能自动签入源码库。
       !!!add命令的执行方式不是递归的。你不得不指明你准备添加到源码库中的文件名和路径。而且,每个目录在添加新文件到其中之前,还必须单独地添加进源码库。
 六、从项目中删除文件。
1、操作步骤和添加的操作差不多,差别在于add改为remove,相同之处在于都需要再commit一次。
2、注意把工作目录下的文件也做相应删除。
3、!!!CVS只是删除了当前版本的指定文件,它以前的版本依然存在,除非它恰好仅有1.1版本

Technorati Tags: , , ,

Debian定时任务管理(二)

Thursday, June 22nd, 2006

Debian定时任务管理(二)

cron 程序使用两种不同类型的配置文件, 即系统 crontab 和用户 crontabs。 两种格式的唯一区别是第六个字段。 在系统 crontab 中,第六个字段是用于执行命令的用户名。 这给予了系统 crontab 以任意用户身份执行命令的能力。 在用户 crontab 中, 第六个字段是要执行的命令,所有的命令都会以这个用户自己的身份执行; 这是一项重要的安全功能。

注意: 同其他用户一样, root 用户也可以有自己的 crontab。 它不同于 /etc/crontab (也就是系统 crontab)。由于有系统 crontab 的存在, 通常并不需要给 root 建立单独的用户 crontab。

看一下debian中默认的crontab文件(路径为/etc)的内容:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don’t have to run the `crontab’
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root run-parts ?report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || run-parts ?report /etc/cron.daily
47 6 * * 7 root test -x /usr/sbin/anacron || run-parts ?report /etc/cron.weekly
52 6 1 * * root test -x /usr/sbin/anacron || run-parts ?report /etc/cron.monthly

(1) 像大多数 配置文件一样,# 字符是注释。作为什么和为什么要执行,可以加一个注释来描述以便将来提醒您。注释不能跟命令一样在同一行上否则他们会被看成命令的一部分。注释应该另起一行。空行将会被忽略。

(2)首先应该定义环境变量。等号 (=) 字符用来定义任何环境变量,像这个例子用到了 SHELL和PATH 变量。如果 shell 行被忽略掉,cron 将会用默认值 sh。如果 PATH 变量被忽略, 那么就没有默认值并且需要指定文件绝对位置。

(3)这一行定义了七个字段。它们是 minute、 hour、mday、 month、wday、 who 和 command。 它们差不多已经说明了各自的用处。Minute 是命令要运行时的分钟,Hour 跟 minute 差不多,只是用小时来表示。Mday 是每个月的天。Month 跟 hour 还有 minute 都差不多,用月份来表示。wday 字段表示星期几。所有这些字段的值必须是数字并且用24小时制来表示。“who” 字段是特别的,并且只在 /etc/crontab 文件中存在。这个字段指定了命令应该以哪个用户的身份来运行。当一个用户添加了他(她)的 crontab 文件的时候,他们就会没有这个字段选项。最后,是 command 字段。这是最后的一个字段,所以自然就是它指定要运行的程序。

(4) 后面几行定义了上面所说的值。无论怎样,扩展到多行的命令应该用反斜线(“\”)来续行。

这是每个 crontab 文件的基本设置,虽然它们有一个不同。第六行我们指定的用户名只存在于系统 /etc/crontab 文件。这个字段在普通用户的 crontab 文件中应该被忽略。

应用实例:(一)

“每天用cron同步服务器时间”

方法1: 加入到 /etc/crontab

cat >> /etc/crontab < < "EOF"# 每天早上六点钟对系统时间进行同步并写入cmos

00 6 * * * root /usr/sbin/ntpdate time.nist.gov && /sbin/hwclock -w

EOF

2.因为/etc/crontab里有这么一项
25 6 * * * root test -x /usr/sbin/anacron || run-parts ?report /etc/cron.daily

所以,也可以加到/etc/cron.daily/目录

cat > /etc/cron.daily/ntpdate < < "EOF"#!/bin/sh

/usr/sbin/ntpdate time.nist.gov | logger -t NTP
/sbin/hwclock -w

EOF

chmod +x /etc/cron.daily/ntpdate

3.加到root用户的 crontabs

cat >/var/spool/cron/crontabs/root << “EOF”

# update time with ntp server
0 3,9,15,21 * * * /usr/sbin/ntpdate 192.43.244.18 | logger -t NTP
EOF

Technorati Tags: , , , , ,

Debian定时任务管理(一)

Thursday, June 22nd, 2006

Debian定时任务管理(一)

[本文转自http://forum.upsdn.net/index.php?prog=topic::flat&tid=1162 ,me根据自己的理解和实验进行了修改]

“Debian定时任务管理”

任何系统管理员权限内的任务都必须位于 /etc 内,因为它们都是配置文件。如果您有一些需要以管理员身份每天 (daily),每周 (weekly) 或每月(monthly) 运行的定时任务,请将它们放置在 /etc/cron.{daily,weekly,monthly} 中。它们将从 /etc/crontab 中被激活,然后按照文件名的字典顺序依次运行。

另一方面,如果您有某个定时任务需要以某个特定的用户身份运行,或者需要在某个特定时刻或以特定周期运行,您或者可以使用 /etc/crontab,或 /etc/cron.d/whatever,而后者会更好一些。这些特殊的文件可以包含一个额外的域,允许您指定运行该定时任务的用户帐户。

在任何情况下,您只需编辑这些文件,cron 将会自动处理它们。没有必要再运行某个特殊的命令。

有两种方法来让一个命令或者脚本执行:
crontab : 执行一个任务一次或者多次.
at : 只执行一次.

crontab是通过读取一个crontab文件来工作,这是一个普通的文本文件,里面列出了要执行的任务
每行都含有要指定的任务的 命令 参数与选项,以及要执行任务的时间。(cron 软件在后台运行并且经常检查 /etc/crontab 文件。cron 软件也检查 /var/cron/tabs 目录,搜索新的 crontab 文件。这些 crontab 文件存储一些 cron 在特定时间执行任务的信息。)

所有的用户都可以设置他们自己的crontab文件,然而,root可以使用两个文件来控制访问:

/etc/cron.allow:如果这个文件存在,只有列在这里面的用户才可以用crontab.
/etc/cron.deny:如果这个文件存在,列在这个文件里面的用户不能用crontab.

所有的crontab文件都保存在/var/spool/cron/crontabs/目录。然而,因为普通用户是无法读写这个目录的,他们必须用crontab命令来加入计划任务

许多系统管理员工使用3个文件来调度任务:/etc/cron.daily, /etc/cron.weekly, 和 /etc/cron.monthly.就像他们的名字所提示的那样,这些目录含有规则的计划任务,在每天,每周或者每月间隔执行一次

“如何使用crontab文件”

键入 crontab options user 或者 crontab -e

(只有root 才能指定其他用户的 crontab文件)

crontab 命令 (调度)

=======================================================================

1.直接用crontab命令编辑

cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除每个用户的cron服务
crontab -e //编辑某个用户的cron服务

比如说root查看自己的cron设置:
crontab -u root -l
再例如,root想删除fred的cron设置:
crontab -u fred -r

在编辑cron服务时,编辑的内容有一些格式和约定,输入:
crontab -u root -e

进入vi编辑模式,编辑的内容一定要符合下面的格式:

*/1 * * * * ls >> /tmp/ls.txt

这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚 本就可 以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:

分钟 (0-59)
小? (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6) //0代表星期天

除了数字还有几个个特殊的符号就是* / - ,

* 代表所有的取值范围内的数字
/ 代表每的意思
*/5 表示每5个单位
- 代表从某个数字到某个数字
, 分开几个离散的数字

以下举几个例子说明问题:

每天早上6点
0 6 * * * echo “Good morning.” >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了

每两个小时
0 */2 * * * echo “Have a break now.” >> /tmp/test.txt

晚上11点到早上8点之间每两个小时,早上八点
0 23-7/2,8 * * * echo “Have a good dream:)” >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line

1月1日早上4点
0 4 1 1 * command line

每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在 这个文 件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

编辑/etc/crontab 文件配置cron

cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用 cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ //使用者运行的路径,这里是根目录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本

大家注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。

Technorati Tags: , , , , ,

debian下如何修正系统时间

Thursday, June 22nd, 2006

debian下如何修正系统时间

自从上次apt-get update;apt-get dist-upgrade后,系统出了很多问题,首先是amule不能正常升级,并且拖累的其他deb包也不能正确配置,惨。后来通过aptitude工 具,尝试了无数种修正方案后才算搞定,但付出的代价是me把7个包(当然包括amule)lock了。

然后就是发现系统的时间每次自动增加8个小时,要知道me已经设置为东八区了,再加8个小时,那算是哪门子的时间呐。很不爽。

记得每次在debian登录时候闪过的一行行天书中好像提到有个和internet同步时间的服务,赶紧apropos  date|grep set后,发现了一个叫ntpdate的程序。man ntpdate后发现,原来需要人为指定一个时间服务器,哪有啊!只好google,嘿,还真找到一个《linux新手精彩问答》,内容如下:

1. 设置你的时区: timeconfig里选择Asia/Shanghai (如果你位于GMT+8中国区域)
2. 与标准时间服务器校准: ntpdate time.nist.gov
2.5 当然,如果你是李嘉诚,也可以跟自己的手表校准: date -s STRING (STRING格式见man date)
3. 写回硬件时钟: hwclock #?systohc

虽然说的是在redhat下,但在debian下操作也差不多。

先运行了下ntpdate time.nist.gov,不错,提示了和标准时间的差值 ;因为me不是李嘉诚,只好抓紧时间把对好的时间写入cmos,man hwclock,呵呵,原来在debian参数为-w,于是hwclock -w。呵呵,一切搞定。

后来又在docs中找到了不少ntpd以及server之类的工具,虽然已经安装了,但me真是不止其所依然,还是留待以后学习解决吧。据说可是比ntpdate强的多呐……

Technorati Tags: , , ,

李敖说的话(一)?矛盾

Thursday, June 22nd, 2006

李敖说的话(一)?矛盾

凤凰卫视未全面落地,就me个人来讲是一点点缺憾,总不能每次去宾馆看吧。幸好有好事者把每集都弄到了网上,有时间就看看,也算清闲。其实这点缺憾并非什么大不 了的事情,因为me本身就不喜欢在固定的时间看某类节目,习惯养成也有十多年了。总感觉非得被限定死,不管在搞什么,到了点就去看节目有点划不来 。本质上是不想被时间或者节目奴役,但是被奴役的事情其实也很多,人生无奈嘛。只好抱着逃一次是一次,躲一点是一点的想法来安慰自己。当然,这是题外话!

这次,李敖又用他的 基本武器(也算是秘密武器吧)卡住了某政治人物的脖子。过程看来很简单,用李敖的话讲叫“就你的锅,下你的面”,其实效果和意义并不简单。所谓政治,都是 建立在抽象层面并且以物质为基础的,圆滑的程度可以想见。想卡住他们并非易事,但是李敖又一次得逞了。“用子之矛,攻子之盾”这句古语成就了现在大家经常 用的“矛盾”一词,然而很多人都念顺了口,把其本来意思弄丢了。看了李敖的节目才知道,原来就这里面也是有很多文章可以做的,其原理原来还可以这样用。

矛盾是斗争的原由, 也是斗争的动力,更是斗争的结果。于是某人讲:领导嘛,就是创造矛盾,然后解决矛盾。把这句话还原到生活工作社会中,精辟透顶。从积极的层面讲,要进步总 是要解决矛盾的,否则所谓的螺旋式上升就失去了动力源泉,而创造矛盾就是寻求突破口,非碌碌之辈可以意识到的;从消极的层面讲,创造矛盾就是内耗,通过矛 盾的处理巩固自己的权位,此种行为对组织效率害莫大亦。细细思索,积极和消极其实式定位或者站位的不同所致。从小我出发,就是消极,是典型的官僚风气,戕 害的是组织和公众的利益;但是如果从大我出发,则是为组织找出路,引领群众突破原生状态,是大利益所在。善恶存乎一念间,诚然!

英文中有个词 context,me一直觉得很不好译,暂且译做“上下文相关的”,再延伸就是“背景和(语义、陈述、生活等等)环境”了。me觉得,矛盾也是有 context的,并且是决定矛盾存在价值和空间的重要元素。比如说,夫妻两人吵架,闹闹打打可以,但一旦偏离夫妻之所以为夫妻之基础,声称离婚,那吵架 就不是吵架,打闹也不是打闹了,因为超出了夫妻矛盾的context,或者说是撕裂了这种共同的语义背景。因此,碰到或者需要处理矛盾的时候,千万要注意 “上下文”,呵呵。再引李敖所引古词句:“歌曰:边风起兮城上寒,井径灭兮丘陇残。千龄兮万代,共尽兮何言!”

矛盾不息,进步不止!

Technorati Tags: , , , ,


关闭
E-mail It