perl如何实现定时执行功能

shootingstar_w 2008-05-28 01:38:25
我写了个定时采集服务器数据的程序,现在想每5分钟执行一次,请问在程序中如何实现。

while(1)
{
###采集程序
...

sleep(300);
}

感觉这样的话程序部分太大。别的有什么处理方法吗?比如alarm...
请问该如何实现
...全文
1123 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shootingstar_w 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 iambic 的回复:]
sleep不挺好的么。什么叫程序部分太大?
[/Quote]

就是程序部分很长,然后还要在主程序外加while
感觉不太美观 呵呵
iambic 2008-05-29
  • 打赏
  • 举报
回复
多写sub对性能没有影响……
shootingstar_w 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iambic 的回复:]
写到一个sub里面不就完了。sleep恐怕是对程序结构(和可读性)影响最小的方法了。
[/Quote]
恩 这应该是比较好的办法了 我已经在程序中嵌套了几个SUB了 对性能会有影响吗

[Quote=引用 8 楼 fibbery 的回复:]
他所说的程序部分太大是采集的时间如果过长,那么采集周期就会超过5分钟!

你可以使用线程,将采集封装到函数,然后创建你的采集线程。
[/Quote]
可能我说的不够清楚,我是指程序代码过长。
暂时采集周期还没有超过5分钟,而且我就是通过线程采集的。还是谢谢!
fibbery 2008-05-29
  • 打赏
  • 举报
回复
他所说的程序部分太大是采集的时间如果过长,那么采集周期就会超过5分钟!

你可以使用线程,将采集封装到函数,然后创建你的采集线程。
iambic 2008-05-29
  • 打赏
  • 举报
回复
写到一个sub里面不就完了。sleep恐怕是对程序结构(和可读性)影响最小的方法了。
iambic 2008-05-28
  • 打赏
  • 举报
回复
sleep不挺好的么。什么叫程序部分太大?
wx红杉树 2008-05-28
  • 打赏
  • 举报
回复
wait
alarm
sigtrap / signal
上面的函数和模块会对你有用的


#!/usr/bin/perl
$SIG{ALRM}=\&timer;

alarm 1;
sub timer {
alarm 0;
print scalar localtime,"\n";
$SIG{ALRM}=\&timer;
alarm 1;
}

while (1) {sleep;}
shootingstar_w 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiuchang 的回复:]
perl里有alarm的功能,需要和eval配合使用
示例如下:
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
}
[/Quote]

那是不是只要定义这样一个信号量就可以了吗,和采集程序主体是怎样联系起来的呢?
jiuchang 2008-05-28
  • 打赏
  • 举报
回复
perl里有alarm的功能,需要和eval配合使用
示例如下:
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
}
xiaoyu9805119 2008-05-28
  • 打赏
  • 举报
回复
win下有计划任务

linux之类的有cron,自己定义一个就行了。
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。   本课程主要讲解以下内容:1. Redis的基本使用2. Redis数据库的数据类型3. Redis数据库数据管理4. Redis的主从复制5. Redis数据库的持久性6. Redis的高可靠性和集群7. Redis的优化和性能测试8. Redis服务器的维护和管理9. Redis服务器的常见问题排错 

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧