【问题标题】:Execute perl script continuously连续执行perl脚本
【发布时间】:2015-09-12 01:06:04
【问题描述】:

我是 Perl 新手,我正在使用 Windows 机器

我正在使用 PHP 和 Perl。我的完整 Web 应用程序是用 PHP 编写的。我每 20 分钟编写一个用于 DB 交互的 Perl 脚本。我的 Perl 脚本是这样的。

use strict;
use warnings;

sub Process1()
{
    use DBI;
    use Date::Format;

    my $DBH=DBI->connect("DBI:mysql:dbname:localhost","root","");
    my $sth=$DBH->prepare("UPDATE tablename SET column1='blah'"); #update query
    $sth->execute();
    while (my @row=$sth->fetchrow_array)
    {
        print $row[0] . "\n";
    }
}


while(1) {
    &Process1(); 
    sleep 900;
}

如果我必须运行我的 perl 脚本,我只需打开 Perl Commad 行并执行命令

perl C:xampp\htdocs\samplescript.pl

我的问题是 -

  • 如何在我的 Linux 服务器上运行相同的 Perl 脚本。
  • 如何执行命令?
  • 如果我在 windows 中关闭 perl 命令行,脚本将停止。
    如何在 linux 服务器中停止相同的脚本?

【问题讨论】:

  • 所有这些都很容易搜索。您是否尝试过并遇到问题?
  • 不要在你的 Perl 子例程中使用原型——sub Process1() 应该只是sub process1;不要使用 & 号调用 Perl 子例程 -- &Process1() 应该是 process1();并且不要在词法变量名中使用大写字母——$DBH 应该是 $dbh
  • 如果你没听说过,那叫 crontab
  • Windows 机器 -- 使用任务计划程序(crontab 将用于 unix/linux)。

标签: php linux perl


【解决方案1】:

恕我直言,最好的方法是将您的 perl 代码编写为简单的“一次性”处理,并依靠系统提供的功能重复运行它:

  • Windows 上的计划任务
  • Linux 上的 Crontab

【讨论】:

    【解决方案2】:

    如果您没有在网上找到它们,这可能会有所帮助。

    在 Linux perl "path"/script.pl 中运行脚本。要在 linux 中连续运行脚本,可以使用 crontab 或通过 shell 脚本运行脚本并在后台运行。

    并在 Linux 中停止脚本,分别使用ps -ef|grep script.pl 命令和kill -9 "process_id" 查找并终止进程。

    【讨论】:

    • pkill script.plpkill -9 script.pl 可能更容易阻止它。
    • kill -9 应该是最后的手段。它会阻止垃圾收集和清理,最终导致主机性能下降。
    【解决方案3】:

    如何在我的 Linux 服务器上运行相同的 Perl 脚本?

    有几种方法可以在 linux 上执行 perl 脚本。

    您需要使用解释器执行您的脚本。在大多数情况下,您使用:

    /usr/bin/env perl /Path/To/Your/script.pl
    

    或者

    /usr/bin/perl /Path/To/Your/script.pl
    

    至少有更好的方法:

    您将解释器路径定义到脚本的第一行。

    #!/usr/bin/env perl
    use strict;
    use warnings;
    
    sub Process1()
    {
        use DBI;
        use Date::Format;
    
        my $DBH=DBI->connect("DBI:mysql:dbname:localhost","root","");
        my $sth=$DBH->prepare("UPDATE tablename SET column1='blah'"); #update query
        $sth->execute();
        while (my @row=$sth->fetchrow_array)
        {
            print $row[0] . "\n";
        }
    }
    
    
    while(1) {
        &Process1(); 
        sleep 900;
    }
    

    然后您可以使用以下命令执行您的脚本:

    /path/to/your/script.pl
    

    如何执行命令?

    你可以在 Linux 终端上执行同样的命令吗?


    如果我在 windows 中关闭 perl 命令行,脚本将停止。 如何在 linux 服务器中停止相同的脚本?

    你可以使用linux的“kill”命令。如果你在后台运行它。如果您关闭终端会话或按 strg+c,脚本也会停止。

    您还可以查看此模块并构建自己的 Perl 命令来停止脚本。

    Getopt::Long


    我的建议

    守护您的脚本并插入一些命令来处理脚本。所以它可以在后台运行。

    Explanation: Daemon(computing)

    【讨论】:

    • nohup /usr/bin/env perl /Path/To/Your/script.pl & 在后台运行脚本。顺便提一句。 While(1) 性能不佳
    猜你喜欢
    • 2012-01-29
    • 2018-04-29
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多