如何在Fedora系统中每小时运行Perl脚本.我有一个perl脚本,它将检查IP中的端口是否打开



我有一个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 "donen"
undef @timeData;
undef $tmp;
undef @temp;
}

这就是 cron 的用途。

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

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

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

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

在答案中浏览整个crontab设置有点多 - 特别是因为各种系统之间存在细微差异。但是,现在您已经了解了crontab,您可以Google搜索所需的信息。

您可以使用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

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

3 * * * * absolute_path/your_program_name  optional_parameters  optional_redirections

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

最新更新