相关疑难解决方法(0)

一个监控Linux目录的程序

有一个伙伴添加产品的新版本的目录.

列表看起来像这样

$ ls path-to-dir/
01
02
03
04
$
Run Code Online (Sandbox Code Playgroud)

列出的数字不是文件,而是包含构建的目录的名称.

我必须每次手动去检查是否有新的版本.我正在寻找一种自动化方法,以便程序可以在path-to-dir/更新时向某些人(包括我)发送电子邮件.

  • 我们是否有一个已经存在的实用程序或Perl库来执行此操作?

    inotify.h做了类似的事情,但我的内核不支持它(2.6.9).

我认为在Perl中可以有一个简单的方法.

  • 你认为这会奏效吗?

    继续在Perl中运行一个循环ls path-to-dir/,例如每隔5分钟执行一次循环并将结果存储在一个数组中.如果发现新结果与旧结果不同,则会使用" 邮件"或" 电子邮件"发送电子邮件.

c c++ unix perl

5
推荐指数
2
解决办法
816
查看次数

如何在固定间隔后运行程序代码?

我有这个Perl脚本用于监视Linux中的文件夹.

为了不断检查目录的任何更新,我有一个在连续循环之间休眠5分钟的while循环:

while(1) {

    ...
    sleep 300;
}
Run Code Online (Sandbox Code Playgroud)

我的其他问题上没有人建议使用cron调度而不是for循环.

while与使用crontab提交cronjob相比,这个没有任何中断的构造看起来很难看:

0 */5 * * * ./myscript > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
  • cron是正确的选择吗?使用while循环结构有什么好处吗?
  • 除了循环和cron之外,还有更好的方法吗?

另外,我正在使用2.6.9内核版本.

unix perl cron

1
推荐指数
1
解决办法
1857
查看次数

如何在Perl脚本中维护邮件收件人列表?

我的Perl脚本用于监视Unix上的目录,它存储在更新监视目录时向其发送通知邮件的用户列表.

这是使用的构造

dirmon.pl

my $subject = '...';    
my $msg     = '...';
my $sendto  = 'a@server.com b@server.com c@server.com';
my $owner   = 'me@server.com';

...    

open my $fh, "|-", "mail", "-s", $subject, $owner, "-c", $sendto
    or die "$0: could not start mail: $!";

print $fh $msg or warn "$0: print: $!";
close $fh;
Run Code Online (Sandbox Code Playgroud)

所以,现在,对于我想要发送通知邮件的每个新用户,我需要转到代码并将其添加到$sendto.这对我来说很好,但我想稍后将该实用程序分发给用户,并且不希望他们手动将地址添加到列表中,至少不直接编辑Perl代码.

我能想到两种选择

  1. 维护具有收件人列表的外部文件.我可以添加一个标志,以便当用户说dirmon.pl -a d@server.com,电子邮件地址被附加到文件,下次发送邮件时,邮件也会转到此收件人(dirmon.pl -r d@server.com从列表中删除用户).唯一的问题是我需要在脚本中再添加一个外部文件,我试图将其最小化.

  2. 我可以在"Perl脚本可以修改自己吗?"的行上自我修改Perl代码..我不确定这是不是一个好主意.

第一种方式是最好的方式吗?有没有更好的方法来维护收件人列表?

email perl

1
推荐指数
1
解决办法
659
查看次数

标签 统计

perl ×3

unix ×2

c ×1

c++ ×1

cron ×1

email ×1