我有一个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;
}
答案 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作业。在实践中,大多数人都没有听过另外几分钟的声音。