Friday, 20. April 2007, 08:36:34
Programing, Linux, Perl
想用Perl做一个自动登录、自动发送请求并取得执行结果的程序,这时候通常要用到LWP::UserAgent。
做了一个POST数据的例子如下:
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my %ua_option = (
agent => "Mozilla/5.0",
timeout => 180,
);
my $ua = LWP::UserAgent->new(%ua_option);
my $url = 'http://your.domain.here/script_name.cgi'; # or 'https://...';
my %form;
$form{USER_ID} = 'user_id';
$form{PASSWORD} = 'password';
my $req = POST($url, [%form]);
my $res = $ua->request($req);
if ($res->is_success) {
print $res->header("Content-Type") . "\n";
print $res->status_line . "\n";
print $res->code . "\n";
print $res->header("Server") . "\n";
#print $res->header("Client-SSL-Cipher") . "\n";
#print $res->header("Client-SSL-Cert-Subject") . "\n";
#print $res->header("Client-SSL-Cert-Issuer") . "\n";
#print $res->header("If-SSL-Cert-Object") . "\n";
print $res->content;
} else {
print $res->status_line . "\n";
}
如果用SSL,需安装Crypt::SSLeay。
Tuesday, 17. April 2007, 06:19:50
Unix, Linux
举例如下:
分 時 日 月 星期
43 21 * * * 21:43 执行
15 05 * * * 05:15 执行
0 17 * * * 17:00 执行
0 17 * * 1 每周一的 17:00 执行
0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行
0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行
0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行
42 4 1 * * 毎月1日的 4:42分 执行
0 21 * * 1-6 周一到周六 21:00 执行
0,10,20,30,40,50 * * * * 每隔10分 执行
*/10 * * * * 每隔10分 执行
* 1 * * * 从1:0到1:59 每隔1分钟 执行
0 1 * * * 1:00 执行
0 */1 * * * 毎时0分 每隔1小时 执行
0 * * * * 毎时0分 每隔1小时 执行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * * 1日 和 15日的 5:30 执行
Friday, 6. April 2007, 09:26:26
Setting, Linux, Command, Route
### 背景 ###server1 和 server2 所处的网段不一样,从 server1 不能直接访问 server2。
server1的IP地址:
eth0 10.224.17.10/255.255.255.0
server2的IP地址:
eth0 172.16.0.20/255.255.255.0
中间有一个服务器server3,有两个网卡,可以同时访问server1和server2
server3的IP地址:
eth0 10.224.17.30/255.255.255.0
eth1 172.16.0.30/255.255.255.0
这时候,只要在server3上进行IP forwading的设置,并在server1和server2进行静态路由的设置,就能实现server1和server2间的互访。
即: server1 <--> server3 <--> server2
### 设置纪录 ###
server3的设置# vi /etc/hosts.allow追加
ALL : 10.224.17.10 172.16.0.20
# vi /etc/hosts.deny追加
ALL : ALL
# vi /etc/sysctl.conf 修改或追加
net.ipv4.ip_forward = 1
# sysctl -w 'net.ipv4.ip_forward=1'server1的设置# vi /etc/sysconfig/static-routes追加
any net 172.16.0.0 netmask 255.255.255.0 gw 10.224.17.30 dev eth0
# /etc/init.d/network restartserver2的设置# vi /etc/sysconfig/static-routes追加
any net 10.224.17.0 netmask 255.255.255.0 gw 172.16.0.30 dev eth0
# /etc/init.d/network restart
Wednesday, 4. April 2007, 03:08:44
Unix, Linux, Command
(例)删除某目录下存在时间超过10分钟文件:
find /filepath -type f -amin +10 -exec rm {} \;
Tuesday, 20. March 2007, 05:13:49
Linux, Mail, Shell
一,用mail命令发送echo "Body" | mail -s "Subject" addr@some.domain
二,用sendmail命令发送email="to@toaddress.com"
emailname="Test Mail"
messagebody="tmp.tmp"
from="from@fromaddress.com"
fromname="MailReport"
subject="Mail Report"
echo -e "To: \"${emailname}\" <${email}>\nFrom: \"${fromname}\" <${from}>\nSubject: ${subject}\n\n`cat ${messagebody}`" | /usr/sbin/sendmail -t
三,借助‘email’工具发送echo "<h1>你好</h1><p style=\"color:red; background-color:gray; height:10em;\">html 邮件测试</p>" | email --html --smtp-user 发送邮件所用的帐号 --smtp-pass 发送邮件所用的密码 --subject "这里是标题" --attach 文件1.zip,文件2.jpg,文件3.tar --cc 抄送到邮件地址 -bcc 暗送到邮件地址 收件人邮件地址
Thursday, 1. March 2007, 02:20:37
Script, Linux
以下是自己制作的启动脚本
#!/bin/sh
#
# chkconfig: 3 65 65
# description: DLE auto start-stop script.
#
# Copyright (c) 2000-2002 The Apache Software Foundation.
# See license at the end of this file.
#
export LANG=ja_JP.eucJP
DLE_HOME=/opt/evdo/kd_dir/dle/3.1/dle
case "$1" in
'start')
# Start dle:
cd $DLE_HOME/shell
./dle_od_start.sh
;;
'stop')
# Stop dle:
cd $DLE_HOME/shell
./dle_od_stop.sh
;;
'restart')
# Restart dle:
$0 stop
$0 start
;;
*)
echo "Usage: dle {start|stop|restart}"
exit 1
esac
需要注意的地方:
# chkconfig: 3 65 65用来设置启动的顺序。
做好后放在 /etc/init.d 下。如/etc/init.d/dle。
然后运行:
# chkconfig dle on
# chkconfig --list dle
这样,机器重启动的时候,就会自动运行:
# /etc/init.d/dle start 以上脚本,若需通过cron定时执行,只需用 crontab 命令添加任务。如
0 10 1 * * /etc/init.d/dle restart 1>/dev/null 2>&1一定要注意脚本中的环境变量的设置。
Friday, 2. February 2007, 07:56:28
Linux, Command, qmail
用
multilog管理的日志文件,内容一般如下:
@4000000045c2ebca008e7a9c ... ...
@4000000045c2ebca008ee02c ... ...
@4000000045c2ebca06e079a4 ... ...
@4000000045c2ebca06e0a884 ... ...
@4000000045c2ebca1207e9d4 ... ...
欲显示可读的时间格式,用以下命令:
# tail -f /var/log/qmail/current | /usr/local/bin/tai64nlocal结果如下:
2007-02-02 16:44:00.009337500 ... ...
2007-02-02 16:44:00.009363500 ... ...
2007-02-02 16:44:00.115374500 ... ...
2007-02-02 16:44:00.115386500 ... ...
2007-02-02 16:44:00.302508500 ... ...
* 以上命令是查看qmail日志的例子。
Thursday, 25. January 2007, 09:43:54
qmail, Linux, Perl
这些天和qmail过不去,或者说是qmail和我过不去,因此作了不少相关的脚本。
为了整理邮件转发列表,作了以下的Perl小程序:
#!/usr/bin/perl
use strict;
use vars qw($result_file);
$result_file = './ml_member_list.txt';
&main();
sub main()
{
if( -e $result_file ) {
unlink($result_file);
}
my $ml_root = '/home/somedir';
opendir(DIR, $ml_root) || die "Open dir $ml_root failed !";
my @all_ml = grep /^\.qmail.*$/, readdir DIR;
print $ml_root . ': '. scalar(@all_ml) . "\n";
for my $ml_name (@all_ml) {
write_file("$ml_name\n");
open(FIN, "$ml_root/$ml_name") || die("Cannot open $ml_name\n");
while(<FIN>) {
write_file("\t$_");
}
close(FIN);
write_file("\n");
}
}
#-------------------------------------------------------------------
sub write_file($)
{
my ($log_msg) = @_;
open(FOUT, ">>$result_file") || die("Cannot open $result_file\n");
print FOUT $log_msg;
close(FOUT);
}
Thursday, 25. January 2007, 06:34:01
Solaris, Linux, Shell
脚本功能如题,内容如下:
#! /bin/sh
#
# Copyright(c) 2007, by ZhiWei Ou.
# All rights reserved.
#
#ident @Z%new_maillog 1.0 2007/01/25 SMI
#
LOGDIR=/var/adm
BAKDIR=/mnt/var_bak/adm
LOG=procmaillog
DATE=`date '+%Y%m%d'`
if test -d $BAKDIR
then
cd $LOGDIR
test -f $LOG && cp -pf $LOG $BAKDIR
tail -10000 $LOG > $LOG.tmp && mv $LOG.tmp $LOG
cd $BAKDIR
gzip $LOG && mv $LOG.gz $LOG.$DATE.gz
fi
*该程序于Solaris下做成,Linux下应该也能用。
Thursday, 25. January 2007, 04:57:53
qmail, Linux
用ezmlm进行邮件列表的管理,有时候需要从所有列表中删除一些邮件账号,手工删除很麻烦,于是用Perl作了一个程序。执行删除之前,只需修改程序中的用户名数组以及域名。
程序如下:
#!/usr/local/bin/perl
use strict;
use vars qw($log_file);
$log_file = './unsub_ml.'. &get_date() . '.log';
&main();
sub main()
{
if( -e $log_file ) {
unlink($log_file);
}
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
&write_log("---------- ". &get_time() . " Start delete member from mailling list ----------\n");
my @domain1_account = (
'domain1_user1',
'domain1_user2',
'domain1_user3',
'domain1_user4',
'domain1_user5',
);
my @domain2_account = (
'domain2_user1',
'domain2_user2',
);
my $ezmlm_unsub = '/usr/local/bin/ezmlm/ezmlm-unsub';
my $ml_root = '/var/qmail/alias';
opendir(DIR, $ml_root) || die "Open dir $ml_root failed !";
my @all_ml = grep !/^\..*$/, readdir DIR;
my $user_id = '';
my $mail_addr = '';
my $unsub_cmd = '';
for my $ml_name (@all_ml) {
next if ($ml_name eq 'Mailbox' || $ml_name eq 'ezmlmadmtools' );
for $user_id (@domain1_account){
$mail_addr = $user_id . '@mail.domain.1';
$unsub_cmd = "$ezmlm_unsub $ml_root/$ml_name $mail_addr";
write_log("$unsub_cmd\n");
system($unsub_cmd);
}
for $user_id (@domain2_account){
$mail_addr = $user_id . '@mail.domain.2';
$unsub_cmd = "$ezmlm_unsub $ml_root/$ml_name $mail_addr";
write_log("$unsub_cmd\n");
system($unsub_cmd);
}
}
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
&write_log("---------- ". &get_time() . " Etart delete member from mailling list----------\n");
}
#-------------------------------------------------------------------
sub get_date()
{
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
return sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday);
}
#-------------------------------------------------------------------
sub get_time()
{
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
return sprintf("%02d:%02d:%02d", $hour, $min, $sec);
}
#-------------------------------------------------------------------
sub write_log($)
{
my ($log_msg) = @_;
open(LOG, ">>$log_file") || die("Cannot open $log_file\n");
print LOG $log_msg;
close(LOG);
}
程序名:
ezmlm_unsub_all.pl
Showing posts 21 -
30 of 63.