如何在每小时的基础上在fedora系统中运行perl脚本。我有一个perl脚本,它将检查IP中的端口是否打开

时间:2014-02-01 07:21:09

标签: linux perl crontab

我有一个perl脚本,它将检查IP中的端口是否打开。我想这个脚本将在linux系统中每小时运行一次。请指教。代码如下:

#!/usr/bin/perl
use DBI;
use strict;
use warnings;

my $dsn = 'dbi:mysql:dbname:localhost:3306';
                my $dbh = DBI->connect('dbi:mysql:dbname:localhost:3306',"root7","pass");
                if(!$dbh)
                {                    
                    print "Not Connnected";
                }
                else
                {
                    print "Connnected";

                my @temp;
                my $tmp=time();
                my @timeData = localtime(time);
                $temp[0] = $timeData[2].":".$timeData[1].":".$timeData[0];
                $temp[1] = $timeData[3]."-".($timeData[4]+1)."-".($timeData[5]+1900);

                my $filename = 'log_c.txt';
                open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
                print $fh "date:$temp[1]: Time:$temp[0]\n";
                close $fh;
                #print "done\n"

                undef @timeData;
                undef $tmp;
                undef @temp;

                }

3 个答案:

答案 0 :(得分:1)

这是cron的用途。

使用命令crontab -e创建一个cronjob。 cron作业是关于运行特定作业的频率的规范,以及要运行的命令或shell脚本。

例如,每小时运行一次Perl脚本:

0 * * * * /usr/home/foo/perscript.pl

前五列是时间规范(参见crontab手册页第5节:man crontab -s5)。但是,cron依赖于每分钟启动crontab任务的daemon来检查各种crontab表(因为每个用户可以有一个)以查看是否有任何要运行的任务。还有一个权限方案,其中有些人允许而其他人被拒绝来运行cron作业。

在答案中通过整个crontab设置有点多 - 特别是因为各种系统之间存在微小的差异。但是,既然您了解了crontab,那么您可以使用Google the information you need

答案 1 :(得分:0)

您可以使用cron(系统的内置功能来安排事情)或包含

use Proc::Daemon;

库将脚本设置为守护程序

并指定

Proc::Daemon::Init;

启用脚本的此守护程序功能。访问控制认为它可能有点乏味,所以我建议你为你的新“服务”添加一个控制脚本,如下所示:

(我再说一遍,cron方法更方便,你可以运行自己的服务)

#!/bin/sh
#
# Simple YOUR_SERVER_NAME_HERE init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.


EXEC=/path/to/script/
PIDFILE=/var/run/script.pid


case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting YOUR_SERVER_NAME_HERE server..."
                $EXEC
                PID=$(pgrep blacklist)
                echo ${PID} > /var/run/blacklist.pid
                # $CONF
        fi
        ;;
    status)
        if [ -f $PIDFILE ]
        then
                PID=$(cat $PIDFILE)
                echo "Service YOUR_SERVER_NAME_HERE running with pid ${PID} "
        else
                echo "Service is stopped"
        fi
        ;;
    restart)
        echo -n "Restarting blacklist: "
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                kill -9 ${PID}
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for YOUR_SERVER_NAME_HERE to shutdown ..."
                    sleep 1
                done
                rm -rf /var/run/blacklist.pid
                echo "YOUR_SERVER_NAME_HERE stopped"
        fi
                if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting YOUR_SERVER_NAME_HERE server..."
                $EXEC
                PID=$(pgrep blacklist)
                echo ${PID} > $PIDFILE
                # $CONF
        fi

        ;;    
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                kill -9 ${PID}
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for YOUR_SERVER_NAME_HERE to shutdown ..."
                    sleep 1
                done
                rm -rf $PIDFILE
                echo "YOUR_SERVER_NAME_HERE stopped"
        fi
        ;;
    *)
         echo "Usage: $0 {start|stop|status|restart}"
        ;;
esac

答案 2 :(得分:0)

您应该请求创建cron作业的权限或让管理员创建此作业。 每小时运行一次的cron作业具有以下规范:

3 * * * * absolute_path/your_program_name  optional_parameters  optional_redirections

在示例中,cron作业将在第3分钟每小时启动一次。 如果一台机器有很多cron作业,我建议你避免在第0或第30分钟因为预期的超载而启动cron作业。在实践中,大多数人都没有听过另外几分钟的声音。