在UNIX *** 作系统下如何实现定时自动运行指定程序

在UNIX *** 作系统下如何实现定时自动运行指定程序,第1张

我们知道,在WINDOWS *** 作系统下, *** 作系统已经提供了实现定时自动运行指定程序的功能,即只要利用 *** 作系统提供的计划任务程序(通常在“开始”--à“程序”----à“附件”----à“系统工具”------à“计划任务”中),根据“添加已计划的任务”所提供的计划任务向导,就可以很容易地将要定时自动运行的任务添加到计划任务中。但在UNIX *** 作系统下,如何实现定时自动运行指定程序,则较少有人知道。其实,在UNIX *** 作系统下, *** 作系统同样也提供了定时自动运行指定程序的功能,下面就如何利用UNIX *** 作系统提供的这一功能,实现在UNIX *** 作系统下定时自动运行指定程序的方法做一介绍。

首先,要用超级用户登录系统,然后在/usr/spool/cron/crontabs目录下,找到文件名为root的文件(在UNIX *** 作系统下,通常在该目录下都会有该文件,如果没有该文件,则可以创建一个),然后用vi编辑器,在该文件中,按照下面的格式,添加所要计划运行的任务:

20 17 * 3,5 * /usr/cite/uptty_t.sh 4 tty67h

#30 18 * * */usr/cite/shell/killtty.sh tty67h

0 16 * * 1-5 /usr/cite/shell/killtty.sh tty65h

上面的每一行代表一个任务,每行有六个字段组成,每个字段间用空格分开,前5个字段由整数表示,为时间,最后一个字段为要运行的程序,顺序为:

分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-6) 要运行的程序

每个字段可用“-”号连接两个数表示一个范围,或用“,”分开几个数,表示任一数确定的时间;或用“*”表示该段省缺,即该字段所有有效值都合法。

每行最前面的#号表示该行是注释行。星期字段中0代表星期天,6代表星期六。

添加完所要增加的计划任务后,保存并退出vi编辑器。然后执行下列命令

crontab root

这个命令把root文件中的内容复制到crontab文件中,一次只能有一个crontab文件。注意,root文件按要求输入并保存好后,一定要执行上面的命令,否则所添加的计划任务不会按要求执行。在某些系统中,并不是所有用户都能使用crontab。目录/etc/cron.d 或 /usr/lib/cron中的cron.allow文件列出了可以使用crontab的用户登录名,如果没有这个文件,则文件/usr/lib/cron/cron.deny中列出了不可以使用crontab的用户名。如果该文件存在,但文件是空的,则每个人都可以使用crontab。如果两个文件都不存在,则只有系统超级用户可以使用crontab。

在使用上面方法进行定时自动运行指定程序的时候,要注意在被执行的程序中,要用cd命令将工作目录切换到指定目录下,否则程序有可能运行不正常。

应用举例:

假如每天要在18:30自动删除/usr/switch/BACKUP/DB/FULL目录下的当前计算机系统日期前2天产生的所有文件(包括该目录下所有子目录里前2天产生的所有文件),则要在/usr/spool/cron/crontabs/root文件中添加下列一行:

30 18 * * * /usr/spool/cron/crontabs/cj.sh

添加完上面一行后,保存退出vi编辑器,然后执行下列命令:

crontab root

这样每天18:30系统就会自动删除/usr/switch/BACKUP/DB/FULL目录下的当前计算机系统日期前2天产生的所有文件(包括该目录下所有子目录里前2天产生的所有文件)。

可执行文件cj.sh存放在/usr/spool/cron/crontabs目录下,注意该文件必须被赋予执行权。该文件的内容为:

cd /usr/switch/BACKUP/DB/FULL

find . -type d -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \

find . -type f -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \

cp /usr/spool/cron/crontabs/db_serio.dat .

cp /usr/spool/cron/crontabs/ftptmp .

cp /usr/spool/cron/crontabs/backuphead .

chmod 777 ftptmp

chmod 777 backuphead

chown switch *

chgrp informix *

注意:在该被执行的程序cj.sh中,用cd /usr/switch/BACKUP/DB/FULL

命令将工作目录切换到了指定目录下,保证程序中第二行语句和第三行语句find . -type d -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \和find . –type f -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \能正确执行。

在find . -type f -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \语句中,选项-atime +2是表示找出最近2天前访问过的文件(日期从运行可执行程序cj.sh时的那个时间算起,从该时间起24小时以内算当天),该选项还可以有下列值:

-ctime n: 找出n天前、后或n天改变的文件,包括权限改变的文件;

-mtime n: 找出n天前、后和当天修改或写入的文件。

选项 –exec 命令 ‘{}’ \对每个匹配的文件运行命令。指定的命令必须跟换义分号(\)。在命令运行时, ‘{}’变元替换当前文件名。该选项也可以用下列值:

-ok 命令 ‘{}’ \同 –exec,但执行命令前先要用y响应。

选项 -type f 是查找普通文件;选项 –type d 是查找目录。

命令 /bin/rm –r在这里是删除指定目录/usr/switch/BACKUP/DB/FULL下的文件或目录(由选项 –type f 或-type d来指定),如果是删除普通文件(由选项 –type f指定),则包括该目录下所有子目录里满足指定时间的文件。

开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中。有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的SHELL提示符界面。其实可通过注释掉rc.local文件中调用图形界面的命令,增加运行用户应用程序的命令,达到开机自动运行用户应用程序的目的。

下面以我做的实验为例,描述具体的实现步骤。该方法源于网络,我加以验证,稍做修改,此文相当于转载。

1.进入pc机的linux

*** 作系统,在/nfs/usr/下通过mkdir

lz

命令新建一个名为lz的文件夹,进入lz文件夹,通过mkdir

hello新建一个hello文件夹用来存放我们将要编写的hello.c文件和编译生成的可执行文件。

2.在/nfs/usr/lz/hello下通过vi

hello.c命令新建hello.c文件,编辑如下测试程序:

#include

int

main(){

printf("Hello,test

arm-linux!")

return

0

}

完成编辑后通过:wq保存后退出。

3.主机通过如下命令交叉编译环境编译hello.c:

#arm-linux-gcc

o

hello

hello.c

4.通过ls

命令可以看到在/nfs/usr/lz/hello/下已经生成了hello可执行文件,我们可以在开发板上通过./hello来测试自己编写的hello.c执行情况

5.修改rc.local文件,在文件的最后通过‘#’释掉启动图形界面的指令,增加执行用户应用程序hello的指令,具体实现如下:

#export

PATH=$QPEDIR/bin:$PATH

#qtopia

#/usr/qtopia/bin/qtopia

/usr/lz/hello/./hello

注:前三行是注释掉启动图形界面,最后一行是添加的执行用户的hello测试程序。

6.重启开发板,通过vivi参数配置让开发板通过nfs挂载主机上的文件系统,这时我们就可以通过超级终端看到开发板已经运行了我们编写的hello程序。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11820960.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存