Linux下文件定时同步
Linux下Rsync定时同步文件
一、rsync安装
1、两台服务器
Client------------222.27.106.89 (rsync的Client端)
Server------------222.27.106.99 (rsync的server端)
2、安装过程
(1)服务端rsync安装
tar -zxvf rsync-3.0.7.tar.gz
cd rsync-3.0.7
./configure
make
make install
说明一点,客户机和服务器都要安装rsync。客户机以客户端
方式运行rsync,服务器端以服务器方式运行rsync,它监听873
端口
(2)配置文件
# touch /etc/ rsyncd.conf
# vi /etc/ rsyncd.conf (内容如下)
#全局配置部分
secrets file = /etc/rsyncd.secrets
read only = yes
list = yes
uid = root
gid = root
hosts allow = 222.27.106.89222.27.106.88 #客户端IP地址,多个IP以空格分开
#hosts deny = 10.4.5.0/24
use chroot = no
max connections = 10
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
charset=GBK
#模块配置部分
[rsyncd]
comment = pag's directory #(自己的说明)
path = /home/test#(要同步server端的目录)auth users = rsync #(用到的用户)
secrets file = /etc/rsyncd.secrets
(3)生成验证证文件
# echo "rsync:rsync" > /etc/rsyncd.secrets (rsync:rsync为用户
和密码,格式为user:passwd)
# chown root:root /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets
(4)最后在server端将rsync以守护进程形式启动
命令为: rsync --daemon
rsync启动的端口为873端口
最好用ntsysv或者chkconfig将rsync设置为开机自动启动
chkconfig --level 35 rsync on
二.Clent端的配置
1.在/etc下面编辑一个rsyncd.secrets的密码存放文件即可
# echo "rsync" > /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets
2. 执行命令为:
rsync -vzurtopg --progress --delete rsync@222.27.106.99::rsyncd
/home/test --password-file=/etc/rsyncd.secrets
setsid rsync -vzurtopg --iconv=GBK,GBK--progress
rsync@172.16.1.64::rsyncd /APP/resource
--password-file=/etc/rsyncd.secrets
rsync -vzurtopg --progress rsync@172.16.1.64::rsyncd /APP/resource --password-file=/etc/rsyncd.secrets
参数详解:
v 表示详细提示
z 表示压缩
u 表示只进行更新
topg 保持文件原有属性如属主、时间的参数
--progress 指显示
--delete 指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
root 为用户名
@222.27.106.99为服务器IP
::后面的rsyncd为认证的模块名
/home/test 为备份到本地的目录名
--password-file=/etc/rsync.secret 制定密码存放位置的地址3. 可以编写脚本rsync.sh
创建/etc/ rsync.sh,添加如下信息:
#!/bin/bash
rsync -vzurtopg --progress --delete rsync@222.27.106.99::rsyncd /home/test/software --password-file=/etc/rsyncd.secrets
然后将该脚本加入到/etc/crontab文件中定时执行更新
4. crontab的设置(定时更新)
# vi /etc/ rsync.sh
文件内容为:
rsync -vzurtopg --progress --delete rsync@222.27.106.99::rsyncd /home/test/software --password-file=/etc/rsyncd.secrets
setsid rsync -vzurtopg --iconv=GBK,GBK--progress
rsync@172.16.1.64::rsyncd /APP/resource
--password-file=/etc/rsyncd.secrets
# chmod 755 /etc/rsync.sh
# crontab –e 加入以下内容:
*/1 * * * * /bin/sh /etc/rsync.sh (每一分钟来同步一次)
备注:10 4 * * * 每天4点10分
crontab –e 10 11 * * * /bin/sh /etc/rsync.sh
三.相关命令
service crond start 注:启动crond
killall crond 注:杀死crond 服务器的进程;
ps aux |grep crond 注:查看一下是否被杀死/启动;
fstab 修改挂载的盘符,中文不乱码
/dev/sdb1 /APP ntfs defaults,codepage=936,iocharset=cp936 0 0
linux下种定时执行任务方法
(1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。 设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。at now + time命令可以在指示任务。 假设处理一个大型数据库,要在别人不用系统时去处理数据,比如凌晨3点10分。那么我们就应该先建立/home/kyle/do_job脚本管理数据库,计划处理/home/kyle/do_job文件中的结果。正常方式是这样启动下列命令: # at 2:05 tomorrow at>/home/kyle/do_job at> Ctrl+D AT Time中的时间表示方法 ----------------------------------------------------------------------- 时间例子说明 ----------------------------------------------------------------------- Minute at now + 5 minutes任务在5分钟后运行 Hour at now + 1 hour任务在1小时后运行 Days at now + 3 days任务在3天后运行 Weeks at now + 2 weeks任务在两周后运行 Fixed at midnight任务在午夜运行 Fixed at 10:30pm任务在晚上10点30分 注意:一定要检查一下atq的服务是否启动,有些操作系统未必是默认启动的,linux 默认为不启动,而ubuntu默认为启动的。检查是否启动,用service atd检查语法,用service atd status检查atd的状态,用service atd start启动atd服务。 查看at执行的具体内容:一般位于/var/spool/at目录下面,用vi打开,在最后一部分
linux定时器详解
Linux内核定时器详解 80X86体系结构上,常用的定时器电路 实时时钟(RTC) RTC内核通过IRQ8上发出周期性的中断,频率在2-8192HZ之间,掉电后依然工作,内核通过访问0x70和0x71 I/O端口访问RTC。 时间戳计时器(TSC) 利用CLK输入引线,接收外部振荡器的时钟信号,该计算器是利用64位的时间戳计时器寄存器来实现额,与可编程间隔定时器传递来的时间测量相比,更为精确。 可编程间隔定时器(PIT) PIT的作用类似于微波炉的闹钟,PIT永远以内核确定的固定频率发出中断,但频率不算高。 CPU本地定时器 利用PIC或者APIC总线的时钟计算。 高精度时间定时器(HPET) 功能比较强大,家机很少用,也不去记了。 ACPI电源管理定时器 它的时钟信号拥有大约为3.58MHZ的固定频率,该设备实际上是一个简单的计数器,为了读取计算器的值,内核需要访问某个I/O端口,需要初始化 定时器的数据结构 利用timer_opts描述定时器 Timer_opts的数据结构 Name :标志定时器员的一个字符串 Mark_offset :记录上一个节拍开始所经过的时间,由时钟中断处理程序调用 Get_offset 返回自上一个节拍开始所经过的时间
Monotonic_clock :返回自内核初始化开始所经过的纳秒数 Delay:等待制定数目的“循环” 定时插补 就好像我们要为1小时35分34秒进行定时,我们不可能用秒表去统计,肯定先使用计算时的表,再用计算分的,最后才用秒表,在80x86架构的定时器也会使用各种定时器去进行定时插补,我们可以通过cur_timer指针来实现。 单处理器系统上的计时体系结构 所有与定时有关的活动都是由IRQ线0上的可编程间隔定时器的中断触发。 初始化阶段 1. 初始化间,time_init()函数被调用来建立计时体系结构 2. 初始化xtime变量(xtime变量存放当前时间和日期,它是一个timespec 类型的数据结构) 3. 初始化wall_to_monotonic变量,它跟xtime是同一类型的,但它存放将加在xtime上的描述和纳秒数,这样即使突发改变xtime也不会受到影响。 4. 看是否支持高精度计时器HPET 5. 调用select_timer()挑选系统中可利用的最好的定时资源,并让 cur_timer变量指向该定时器 6. 调用setup_irq(0,&irq0)来创建与IRQ相应的中断门。 时钟中断处理程序 1. 在xtime_lock顺序锁产生一个write_seqlock()来保护与定时相关的内核变量,这样防止中断让该进程被阻止。 2. 执行cur_timer定时器对象的mark_offset方法(记录上一个节拍开始所经过的时间,由时钟中断处理程序调用) 3. 调用do_timer_interrupt函数,步骤为 a) 使jiffies_64值增1 b) 调用updata_times()函数来更新系统日期和时间。
LINUX 内核的几种锁介绍
spinlock(自旋锁)、 mutex(互斥量)、 semaphore(信号量)、 critical section(临界区) 的作用与区别 Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。 Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。 Binary semaphore与Mutex的差异: 在有的系统中Binary semaphore与Mutex是没有差异的。在有的系统上,主要的差异是mutex一定要由获得锁的进程来释放。而semaphore可以由其它进程释放(这时的semaphore实际就是个原子的变量,大家可以加或减),因此semaphore 可以用于进程间同步。Semaphore的同步功能是所有系统都支持的,而Mutex能否由其他进程释放则未定,因此建议mutex只用于保护critical section。而semaphore则用于保护某变量,或者同步。 另一个概念是spin lock,这是一个内核态概念。spin lock与semaphore的主要区别是spin lock是busy waiting,而semaphore是sleep。对于可以sleep 的进程来说,busy waiting当然没有意义。对于单CPU的系统,busy waiting 当然更没意义(没有CPU可以释放锁)。因此,只有多CPU的内核态非进程空间,
Linux下定时执行脚本
Linux下定时执行脚本 今天做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置。Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,设置比Windows稍微复杂一些(因为没有图形界面嘛),但是也不是非常复杂,基本上用过一遍就能记住了,关键是要记住/var/spool/cron这个目录。下面看一下具体的用法: 首先查看一下/etc/crontab文件: $ cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 前四行是有关设置cron任务运行的环境变量。SHELL变量的值指定系统使用的SHELL环境(该样例为bash shell),PATH变量定义了执行命令的路径。Cron的输出以电子邮件的形式发给MAILTO变量定义的用户名。如果MAILTO变量定义为空字符串(MAILTO=""),电子邮件不会被发送。执行命令或脚本时HOME变量可用来设置基目录。 文件/etc/crontab中每行任务的描述格式如下: minute hour day month dayofweek command minute - 从0到59的整数 hour - 从0到23的整数 day - 从1到31的整数 (必须是指定月份的有效日期) month - 从1到12的整数 (或如Jan或Feb简写的月份)
Linux复习(成熟期版)
前面的可能考选择题,填空题,全部题型如下: 一、选择题(10个题,每题2分,共20分) 二、填空题(10个空,每空2分,共20分) 三、程序阅读题(2道题,共20分) 四、程序注释(1道题,共20分)可能考I/O 五、编程题(1道题,共20分) P 154 文件I/O操作open()、read()、write()、lseek()和close() 仔细阅读程序,能写注释或填空。 /* copy_file.c */ #include
linux定时执行crontab
linux定时执行crontab 2009-11-18 作者:编辑:闫蕊点击进入论坛 关键词:linux crontab -e 进入一个vi 编辑界面 在最后一行加上 */30 * * * * netstat > /tmp/net.log 表示每隔30分就执行netstat命令,并把执行结果存入net.log中。 Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序 使用cron服务,用service crond status 查看cron服务状态,如果没有启动则service crond start启动它, cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务: 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 编辑/etc/crontab文件,在末尾加上一行:30 5 * * * root init 6 这样就将系统配置为了每天早上5点30自动重新启动。
Linux中直接IO机制的介绍
Linux 中直接 I/O 机制的介绍https://www.360docs.net/doc/0d17799090.html,/developerworks/cn/linux/l-cn-...
https://www.360docs.net/doc/0d17799090.html,/developerworks/cn/linux/l-cn-...
当应用程序需要直接访问文件而不经过操作系统页高速缓冲存储器的时候,它打开文件的时候需要指定 O_DIRECT 标识符。 操作系统内核中处理 open() 系统调用的内核函数是 sys_open(),sys_open() 会调用 do_sys_open() 去处理主要的打开操作。它主要做了三件事情:首先,它调用 getname() 从进程地址空间中读取文件的路径名;接着,do_sys_open() 调用 get_unused_fd() 从进程的文件表中找到一个空闲的文件表指针,相应的新文件描述符就存放在本地变量 fd 中;之后,函数 do_?lp_open() 会根据传入的参数去执行相应的打开操作。清单 1 列出了操作系统内核中处理 open() 系统调用的一个主要函数关系图。 清单 1. 主要调用函数关系图 sys_open() |-----do_sys_open() |---------getname() |---------get_unused_fd() |---------do_filp_open() |--------nameidata_to_filp() |----------__dentry_open() 函数 do_?ip_open() 在执行的过程中会调用函数 nameidata_to_?lp(),而 nameidata_to_?lp() 最终会调用 __dentry_open()函数,若进程指定了 O_DIRECT 标识符,则该函数会检查直接 I./O 操作是否可以作用于该文件。清单 2 列出了 __dentry_open()函数中与直接 I/O 操作相关的代码。 清单 2. 函数 dentry_open() 中与直接 I/O 相关的代码 if (f->f_flags & O_DIRECT) { if (!f->f_mapping->a_ops || ((!f->f_mapping->a_ops->direct_IO) && (!f->f_mapping->a_ops->get_xip_page))) { fput(f); f = ERR_PTR(-EINVAL); } } 当文件打开时指定了 O_DIRECT 标识符,那么操作系统就会知道接下来对文件的读或者写操作都是要使用直接 I/O 方式的。 下边我们来看一下当进程通过 read() 系统调用读取一个已经设置了 O_DIRECT 标识符的文件的时候,系统都做了哪些处理。函数read() 的原型如下所示: ssize_t read(int feledes, void *buff, size_t nbytes) ; 操作系统中处理 read() 函数的入口函数是 sys_read(),其主要的调用函数关系图如下清单 3 所示: 清单 3. 主调用函数关系图 sys_read() |-----vfs_read() |----generic_file_read() |----generic_file_aio_read() |--------- generic_file_direct_IO()
linux下自动化任务的例子——定时播放音乐
linux下自动化任务的例子 在linux系统中实现作业的自动化是非常便利的。 比较常用的是Cron服务的crontab这个命令。 ?一个具体的任务列表 这个是学校室外广播的自动程序,只用了?一台被废弃的塞羊800的学生机,安装的系统是红旗linux,其他的linux、FreeBSD、unix或者是MacOS都可以。 将Cron设为自动运行。 chkcon?g –level 35 crond on 进入系统终端 键入: crontab -u caizhongyi -e (crontab为命令,“-u cai”是指定执行作业的系统用户为cai,“-e”使用crontab自己的vi编辑器,防止出现编码或系统环境问题造成的错误)然后在编辑器(vi编辑器)中输入如下命令: 0 7 * * 1 mpg123 -q /home/cai/guangbo/001.mp3 21 8 * * 1 mpg123 -q /home/cai/guangbo/11.mp3 21 8 * * 2 mpg123 -q /home/cai/guangbo/21.mp3 21 8 * * 3 mpg123 -q /home/cai/guangbo/31.mp3 21 8 * * 4 mpg123 -q /home/cai/guangbo/41.mp3 21 8 * * 5 mpg123 -q /home/cai/guangbo/51.mp3 16 9 * * 2 mpg123 -q /home/cai/guangbo/212.mp3 16 9 * * 3 mpg123 -q /home/cai/guangbo/312.mp3 16 9 * * 4 mpg123 -q /home/cai/guangbo/412.mp3 16 9 * * 5 mpg123 -q /home/cai/guangbo/512.mp3 25 10 * * 1 mpg123 -q /home/cai/guangbo/12.mp3 25 10 * * 2 mpg123 -q /home/cai/guangbo/22.mp3 25 10 * * 3 mpg123 -q /home/cai/guangbo/32.mp3 25 10 * * 4 mpg123 -q /home/cai/guangbo/42.mp3
实验四 Linux进程互斥
实验四 Linux进程互斥 一、实验目的 熟悉Linux下信号量机制,能够使用信号量实现在并发进程间的互斥和同步。 二、实验题目 使用共享存储区机制,使多个并发进程分别模拟生产者-消费者模式同步关系、临界资源的互斥访问关系,使用信号量机制实现相应的同步和互斥。 三、背景材料 (一)需要用到的系统调用 实验可能需要用到的主要系统调用和库函数在下面列出,详细的使用方法说明通过“man 2 系统调用名”或者“man 3 函数名”命令获取。 fork() 创建一个子进程,通过返回值区分是在父进程还是子进程中执行; wait() 等待子进程执行完成; shmget() 建立一个共享存储区; shmctl() 操纵一个共享存储区; s hmat() 把一个共享存储区附接到进程内存空间; shmdt() 把一个已经附接的共享存储区从进程内存空间断开; semget() 建立一个信号量集; semctl() 操纵一个信号量集,包括赋初值; semop() 对信号量集进行wait和signal操作; signal() 设置对信号的处理方式或处理过程。 (二)模拟生产者-消费者的示例程序 本示例主要体现进程间的直接制约关系,由于使用共享存储区,也存在间接制约关系。进程分为服务进程和客户进程,服务进程只有一个,作为消费者,在每次客户进程改变共享存储区内容时显示其数值。各客户进程作为生产者,如果共享存储区内容已经显示(被消费),可以接收用户从键盘输入的整数,放在共享存储区。 编译后执行,第一个进程实例将作为服务进程,提示: ACT CONSUMER!!! To end, try Ctrl+C or use kill. 服务进程一直循环执行,直到用户按Ctrl+C终止执行,或使用kill命令杀死服务进程。 其他进程实例作为客户进程,提示: Act as producer. To end, input 0 when prompted. 客户进程一直循环执行,直到用户输入0。 示例程序代码如下: #include
Linux的crontab命令
linux定时运行命令脚本——crontab 分类:Linux/Shell2011-09-24 11:12 12787人阅读评论(0) 收藏举报 Linux中,周期执行的任务一般由cron这个守护进程来处理 ps -ef | grep cron cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。 cron的配置文件称为“crontab”,是“cron table”的简写。 一、cron在3个地方查找配置文件(设置shell脚本): 1、/var/spool/cron/yanggang 这个目录下存放的是每个用户(包括root)的crontab任务,每个任务以创建者的名字命名,比如用户tom建的crontab任务对应的文件就是/var/spool/cron/tom yanggang@barry$ sudo ls -l /var/spool/cron/(或有时 是 /var/spool/cron/crontabs/) -rw------- 1 root crontab 1071 2011-09-19 17:20 root -rw------- 1 yanggang crontab 1176 2011-09-24 11:07 yanggang 一般一个用户最多只有一个crontab文件(如:root, yanggang等),其对应日志在/var/spool/mail/root(或/var/spool/mail/yanggang)文件里 2、/etc/crontab这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR #sun,mon,tue,wed,thu,fri,sat # | | | | |
Linux定时任务设置
Linux 下定时任务设置 文章分类:操作系统 为当前用户创建cron服务 1. 键入crontab -e 编辑crontab服务文件 例如文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh 保存文件并并退出 */2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh */2 * * * * 通过这段字段可以设定什么时候执行脚本 /bin/sh /home/admin/jiaoben/buy/deleteFile.sh 这一字段可以设定你要执行的脚本,这里要注意一下bin/sh 是指运行脚本的命令后面一段时指脚本存放的路径 2. 查看该用户下的crontab服务是否创建成功,用crontab -l命令 3. 启动crontab服务 一般启动服务用/sbin/service crond start 若是根用户的cron服务可以用sudo service crond start,这里还是要注意下不同版本linux系统启动的服务的命令也不同,像我的虚拟机里只需用sudo service cron restart 即可,若是在根用下直接键入service cron start 就能启动服务
4. 查看服务是否已经运行用ps -ax | grep cron 5. 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 任务调度的crond常驻命令 crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此 任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工 作便会自动执行该工作。
linux定时器和Jiffies
1.linux HZ Linux核心几个重要跟时间有关的名词或变数,以下将介绍HZ、tick与jiffies。 HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。 HZ可在编译核心时设定,如下所示(以核心版本 adrian@adrian-desktop:~$ cd /usr/src/linux adrian@adrian-desktop:/usr/src/linux$ make menuconfig Processor type and features ---> Timer frequency (250 HZ) ---> 其中HZ可设定100、250、300或1000。 小实验 观察/proc/interrupt的timer中断次数,并于一秒后再次观察其值。理论上,两者应该相差250左右。 adrian@adrian-desktop:~$ cat /proc/interrupts | grep timer && sleep 1 && cat /proc/interrupts | grep timer 0: 9309306 IO-APIC-edge timer 0: 9309562 IO-APIC-edge timer 上面四个栏位分别为中断号码、CPU中断次数、PIC与装置名称。
要检查系统上HZ的值是什么,就执行命令 cat kernel/.config | grep '^CONFIG_HZ=' 2.Tick Tick是HZ的倒数,意即timer interrupt每发生一次中断的时间。如HZ为250时,tick为4毫秒(millisecond)。 3.Jiffies Jiffies为Linux核心变数(unsigned long),它被用来记录系统自开机以来,已经过了多少tick。每发生一次timer interrupt,Jiffies变数会被加一。值得注意的是,Jiffies于系统开机时,并非初始化成零,而是被设为-300*HZ (arch/i386/kernel/time.c),即代表系统于开机五分钟后,jiffies 便会溢位。那溢位怎么办?事实上,Linux核心定义几个macro(timer_after、time_after_eq、time_before与time_before_eq),即便是溢位,也能借由这几个macro正确地取得jiffies的内容。 另外,80x86架构定义一个与jiffies相关的变数jiffies_64 ,此变数64位元,要等到此变数溢位可能要好几百万年。因此要等到溢位这刻发生应该很难吧。
linux通讯
线程+定时实现linux下的Qt串口编程 2010-06-26 10:49 转: 线程+定时实现linux下的Qt串口编程 作者:lizzy115 时间:2010,5,14 说明:本设计采用的是线程+定时实现linux下的Qt串口编程,而非网上资料非常多的Qt编写串口通信程序全程图文讲解系列,因为Qt编写串口通信程序全程图文讲解系列是很好实现,那只是在windows下面的,可是在linux 下面实现串口的通信并非如此,原因在于QextSerialBase::EventDriven跟QextSerialBase::Polling这两个事件的区别,EventDriven属于异步,Polling 属于同步,在windows下面使用的是EventDriven很容易实现,只要有数据就会触发一个串口事件,网上说linux下面需要的是Polling,可是还是不行的,只要串口有数据的时候他会在QByteArray temp = myCom->readAll(); 这句一直读取数据,没能退出,直到断掉串口的时候才能把接受到的串口数据通过 ui->textBrowser->insertPlainText(temp);打印在界面上,一直没能解决这个问题,所以只好采用线程+定时实现linux下的Qt串口编程进行设计。 一、安装环境: 系统平台:Ubuntu-8.04,内核2.6.24-27-generic,图形界面 二、软件需求及下地地址: Qt版本 qt-linux-SDK-4.6.2 注意:此处使用的是qt-linux-SDK-4.6.2版本,编译通过了,之后需要把他移植到qt-embedded-linux-opensource-src-4.5.3.tar.gz,通过qte编译后移植到开发板中,采用的测试开发板为Micro2440, 下载地址:略 三、程序编写过程 程序编程流程: 先新建一个工程空白工程,再建立Ui文件,通过designer进行Ui 界面设计,设计完保存,编译生成ui_mainwindow.h头文件,编写线程头文件及线程处理.cpp文件,建立串口处理头文件及 .cpp文件,最后完成main.cpp 文件。
linux下种定时执行任务方法
(1)at 命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at 监控程序了。 设置at 命令很简单,指示定运行的时间,那么就会在哪个时候运行。at 类似打印进程,会把任务放到/var/spool/at 目录中,到指定时间运行它。at 命令相当于另一个shell ,运行at time 命令时,它发送一个个命令,可以输入任意命令或者程序。at now + time 命令可以 在指示任务。 假设处理一个大型数据库,要在别人不用系统时去处理数据,比如凌晨3 点10 分。那么我们就应该先建立/home/kyle/do_job 脚本管理数据库,计划处理/home/kyle/do_job 文件中的结果。正常方式是这样启动下列命令: # at 2:05 tomorrow at>/home/kyle/do_job at> Ctrl+D AT Time 中的时间表示方法 时间例子说明 Minute at now + 5 minutes任务在 5 分钟后运行 Hour at now + 1 hour 任务在 1 小时后运行 Days at now + 3 days任务在3 天后运行 Weeks at now + 2 weeks 任务在两周后运行 Fixed at midnight任务在午夜运行 Fixed at 10:30pm 任务在晚上10 点30 分 注意:一 默认为不启定要检查一下atq 的服务是否启动,有些操作系统未必是默认启动的, 而ubuntu 默认为启动的。检查是否启动,用service atd 检查语法, linux 用 service atd status 检查atd 的状态,用service atd start 启动atd 服务。 查看at 执行的具体内容:一般位于/var/spool/at 目录下面,用vi 打开,在最后一部分
linux定时器详解
查看文章 Linux 定时器设置(一)2010-04-12 17:07定时器设置函数alarm设置的定时器只能精确到秒,而以下函数理论上可以精确到微妙: #include
操作系统课内实验大纲(2014)
操作系统原理课内实验大纲(2014版) 实验一:用户接口实验 实验目的 1)理解面向操作命令的接口Shell。 2)学会简单的shell编码。 3)理解操作系统调用的运行机制。 4)掌握创建系统调用的方法。 操作系统给用户提供了命令接口和程序接口(系统调用)两种操作方式。用户接口实验也因此而分为两大部分。首先要熟悉Linux的基本操作命令,并在此基础上学会简单的shell 编程方法。然后通过想Linux内核添加一个自己设计的系统调用,来理解系统调用的实现方法和运行机制。在本次实验中,最具有吸引力的地方是:通过内核编译,将一组源代码变成操作系统的内核,并由此重新引导系统,这对我们初步了解操作系统的生成过程极为有利。 实验内容 1)控制台命令接口实验 该实验是通过“几种操作系统的控制台命令”、“终端处理程序”、“命令解释程序”和“Linux操作系统的bash”来让实验者理解面向操作命令的接口shell和进行简单的shell 编程。 查看bash版本。 编写bash脚本,统计/my目录下c语言文件的个数 2)系统调用实验 该实验是通过实验者对“Linux操作系统的系统调用机制”的进一步了解来理解操作系统调用的运行机制;同时通过“自己创建一个系统调用mycall()”和“编程调用自己创建的系统调用”进一步掌握创建和调用系统调用的方法。 编程调用一个系统调用fork(),观察结果。
编程调用创建的系统调用foo(),观察结果。 自己创建一个系统调用mycall(),实现功能:显示字符串到屏幕上。 编程调用自己创建的系统调用。 实验要求 1)按照实验内容,认真完成各项实验,并完成实验报告。 2)实验报告必须包括:程序清单(含注释)、实验结果、实验中出现的问题、观察到 的现象的解释和说明,以及实验体会。
linux定时任务详细说明
Linux 定时任务 fileclear.sh tamcdir=${HOME}/ora/user_projects/domains/tamc cd ${tamcdir} echorm-f `ls heapdump*.phd` rm-f heapdump*.phd echorm-f `ls javacore*.txt` rm-f javacore*.txt echorm-f `ls Snap*.trc` rm-f Snap*.trc cd bin echocp/dev/null nuhup.out cp/dev/null nuhup.out cd ${tamcdir}/pxbak echorm-rf `ls20*` rm-rf 20* cd ${tamcdir}/webapps/tamcx/fileLoad echorm-f `find/weblogic/ora/user_projects/domains/tamc/webapps/tamcx/fileLoad/ -mtime +1` find/weblogic/ora/user_projects/domains/tamc/webapps/tamcx/fileLoad/ -mtime +1 -exec rm-f {} \; task.crontab #web服务端日志、临时文件清理 101* * * ksh $HOME/tools/clearweblogic.sh>>/weblogic/ora/user_projects/domai ns/tamc/webapps/tamcx/log/crontab.log 2>>/weblogic/ora/user_projects/domains/ta mc/webapps/tamcx/log/crontab.log task.null.crontab是一个没有内容的空文件 开启定时任务 crontab /weblogic/tools/task.crontab 停止定时任务 crontab /weblogic/tools/task.null.crontab crontab [-u username] [-l|-e|-r]