分页: 10/19 第一页 上页 5 6 7 8 9 10 11 12 13 14 下页 最后页 [ 显示模式: 摘要 | 列表 ]
Jun 16
用date +%s可以得到UNIX的时间戳,
[/home/javalee/myshell] # date +%s
1060510783
而用

date -d '1970-01-01 UTC '$1' seconds' +"%Y-%m-%d %T"
[/home/javalee/myshell] #utc 1047335700
2003-03-11 06:35:00
可以把UNIX时间戳转换成当前系统时间!

awk日期和时间戳转换
2011-03-23 15:36

strftime 将时间戳转日期
awk 'BEGIN{print strftime("%Y-%m-%d",systime())}'

将日期转为时间戳
awk 'BEGIN {printf("%d\n",mktime(2006" "8" "5" "15" "09" "0))}'

Tags: ,
Jun 16
crontab是linux自带的计划任务程序,可以实现分,时,日,周,月。

但是crontab有两个缺陷:
1.最小粒度为分,对于秒不支持
2.若是上一个任务的执行时间超过下一个任务的开始时间的话,就会出现两个任务并行的现象,这样任务会越积越多,最后系统挂了。
这周在项目里需要实现每隔10秒去执行任务的功能,因此写了个shell程序:
1.可以自定义程序执行时间间隔,
2.使用的是deamon方式,产生两个进程,父进程监控子进程,若是子进程挂了,父进程重新启动子进程,子进程负责每隔10秒钟执行任务;
3.而且当任务执行时间超长时,不会出现两个任务同时执行的现象,下一个任务只会延后。也可以用后台运行方式运行任务,这样和crontab的效果一样
4.若是时间间隔为10秒,而任务只执行了1秒,则sleep 9秒后,执行下一次任务
5.若是把sleep改为usleep的话可以精确到微秒
引用
#运行执行 sh /Application/sdns/trigger/task_crontab.sh >> /Application/sdns/log/crontab.log 2>&1
#要定时执行的脚本,注意:不使用后台运行,则若是超过10秒的话,下一次会延迟,若是使用后台执行的话,有可能出现两个任务并行的问题
dlc_cmdline="sh /Application/sdns/trigger/dotask.sh >> /Application/sdns/log/dotask.log";
#本shell脚本的执行路径
dlc_thiscmd="sh /Application/sdns/trigger/task_crontab.sh >> /Application/sdns/log/crontab.log 2>&1"
#任务执行时间间隔
dlc_task_timeout=10;
#是否后台执行deamon
is_deamon=$1;
#deamon,父进程
if [ "$is_deamon" == "--deamon" ]
then
echo "deamon start"
while [ 1 ]
do
date +"%F %T $dlc_thiscmd is started";
#调用子进程
$dlc_thiscmd
date +"%F %T $dlc_thiscmd is ended";
done
fi
#子进程的代码
while [ 1 ]
do
date +"%F %T $dlc_cmdline is started" ;
#记录本次程序开始时间
dlc_start_time=`date +%s`
#执行任务
$dlc_cmdline
#计算和时间间隔的差距
dlc_sleep_time=$(($dlc_task_timeout+$dlc_start_time-`date +%s`));
echo "sleep_time=[$dlc_sleep_time]";
#不够10秒,则sleep到10秒
if [ "$dlc_sleep_time" -gt 0 ]
then
sleep $dlc_sleep_time;
fi
date +"%F %T $dlc_cmdline is ended";
done
转自:http://blog.chinaunix.net/space.php?uid=11121450&do=blog&id=274490
Tags: ,
Jun 16
今天编译内核后重启IPTABLES时却无法启动如下:

[root@localhost ~]# service iptables restart
Flushing firewall rules:  
                                 [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules: iptables-restore: line 31 failed
                                                           [FAILED]
配置文件是:
[root@localhost ~]# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5601 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5602 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
这个问题查了很久,后来  strace iptables-restore /etc/sysconfig/iptables 发现问题。
open("/lib/iptables/libipt_RH-Firewall-1-INPUT.so", O_RDONLY) = -1 ENOENT (No such file or directory)
这个libipt_RH-Firewall-1-INPUT.so我的2.6.25.2的内核没有编译出来(或者可能就没有)。
但是其实这个.so文件没有也可以正常工作的。后来我在H-Firewall-1-INPUT正常的CentOS5.1上也没看到这个.so文件。
RH-Firewall-1-INPUT是个自定义的子链。
可以通过
#iptables -N RH-Firewall-1-INPUT
#service iptables save
#service iptables restart
c)ip_conntrack_netbios_n
[root@localhost ~]# service iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[FAILED]
调试/etc/rc.d/init.d/iptables查找问题。
发现:
    # Load additional modules (helpers)
    if [ -n "$IPTABLES_MODULES" ]; then
        echo -n $"Loading additional $IPTABLES modules: "
        ret=0
        for mod in $IPTABLES_MODULES; do
            echo -n "$mod "
            modprobe $mod > /dev/null 2>&1
            let ret+=$?;
        done
        [ $ret -eq 0 ] && success || failure
        echo
    fi
    touch $VAR_SUBSYS_IPTABLES
    return $ret
        
modprobe ip_conntrack_netbios_ns > /dev/null 2>&1
而ip_conntrack_netbios_ns这个文件我没有的,奇怪的是IPTABLES_MODULES这个参数在/etc/rc.d/init.d/iptables我没有找到赋值的地方。原来是在/etc/sysconfig/iptables-config
注释掉。
IPTABLES_MODULES="ip_conntrack_netbios_ns"
好像是配置netbios穿越NAT用的,一般用不到的。
ip_conntrack_netbios_ns 这个模块在make menuconfig 中是IP_NF_NETBIOS_NS。
/etc/rc.d/init.d/iptables restart
[root@localhost ~]# /etc/rc.d/init.d/iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
去掉脚本中的调试语句。OK
Tags: ,
May 20
  我这两天在工作中遇到了一些问题,在今天下午全部解决,于是决定写一篇文章,将实现方法记录下来:

  一、背景环境:
  1、都是Linux服务器;
  2、“服务器A”与“服务器C”不在同一网络,两者之间是不通的;
  3、“服务器A”、“服务器C”分别与“服务器B”相通。

  二、要实现的需求:
  1、让“服务器A”上的PHP程序能够连接“服务器C”上的MySQL数据库(IP:10.10.1.4,端口:3306);
  2、不允许在“服务器A”上的PHP程序中更改MySQL地址(10.10.1.4)和MySQL端口(3306)。

  三、实现原理:
  理论上从“服务器A”是无法直接连接“服务器C”的IP地址(10.10.1.4)及其3306端口的【图中的虚线】,但通过“IP别名+TCP转发+端口映射”,我在“服务器A”上的PHP程序无须作任何修改的情况下实现了这项功能【图中的实线】。
  访问路线:“服务器A”上的PHP程序─→虚拟10.10.1.4:3306─→192.168.1.3:8520─→真实10.10.1.4:3306

  点击在新窗口中浏览此图片
  四、实现方法:
  1、修改“服务器A”上的Apache配置文件httpd.conf(以下仅列出要修改的部分,其余部分用......表示):
引用
................
Listen 192.168.1.2:80
................
NameVirtualHost 192.168.1.2:80
<VirtualHost 192.168.1.2:80>
................

  然后重启Apache:
  /usr/local/apache/bin/httpd -k restart

  2、在“服务器A”上创建本地回环设备lo(即127.0.0.1)的IP别名10.10.1.4,即虚拟IP:
  『图中的①』
  /sbin/ifconfig lo:0 10.10.1.4 broadcast 10.10.1.4 netmask 255.255.255.255 up
  /sbin/route add -host 10.10.1.4 dev lo:0

  3、在“服务器A”上编译安装TCP转发软件rinetd(官方网站:http://www.boutell.com/rinetd/),将对10.10.1.4:80的TCP请求重定向到192.168.1.3:8520上:
  『图中的②』
  wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
  tar zxvf rinetd.tar.gz
  cd rinetd
  make && make install
  vi /etc/rinetd.conf
  输入以下内容(格式:源地址 源端口 目标地址 目标端口):
    10.10.1.4 80 192.168.1.3 8520
  启动rinetd守护进程
  /usr/sbin/rinetd -c /etc/rinetd.conf

  4、在“服务器B”上利用iptables配置端口映射,将自身的8520端口映射到10.10.1.4的3306端口上:
  『图中的③』
  echo "1"> /proc/sys/net/ipv4/ip_forward
  /sbin/iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 -d 192.168.1.3 --dport 8520 -j DNAT --to-destination 10.10.1.4:3306
  /sbin/iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 10.10.1.4 --dport 3306 -j SNAT --to-source 10.10.1.3

  为了防止服务器重启导致TCP转发失效,请:
  vi /etc/rc.local
  增加一行:
    echo "1"> /proc/sys/net/ipv4/ip_forward
  或者:
  vi /etc/sysctl.conf
  增加一行:
    net.ipv4.ip_forward = 1
  使其生效:/sbin/sysctl -p
       文章来源:http://blog.s135.com/post/286/
May 20
一、搭建时间同步服务器
1、编译安装ntp server

wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.6.tar.gz
tar zxvf ntp-4.2.6.tar.gz
cd ntp-4.2.6
./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
make && make install

注:如以上下载地址无法访问,请从ntp官方下载网页(http://www.ntp.org/downloads.html)寻找下载地址。

2、修改ntp.conf配置文件

vi /etc/ntp.conf

①、第一种配置:允许任何IP的客户机都可以进行时间同步
将“restrict default kod nomodify notrap nopeer noquery”这行修改成:

restrict default nomodify

配置文件示例:/etc/ntp.conf

②、第二种配置:只允许192.168.18.***网段的客户机进行时间同步
在restrict default nomodify notrap noquery(表示默认拒绝所有IP的时间同步)之后增加一行:

restrict 192.168.18.0 mask 255.255.255.0 nomodify

配置文件示例:/etc/ntp.conf

3、以守护进程启动ntpd

/usr/local/ntp/bin/ntpd -c /etc/ntp.conf -p /tmp/ntpd.pid

4、ntpd启动后,客户机要等几分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。

二、配置时间同步客户机

vi /var/spool/cron/root

增加一行,在每天的5点13分、9点13分、14点13分、19点13分与时间同步服务器进行同步

13 5,9,14,19 * * * /usr/sbin/ntpdate 192.168.18.2

备注:如果客户机没有ntpdate,可以下载ntpdate.tar.gz到/usr/sbin/目录,然后解压:

wget http://blog.s135.com/attachment/200708/ntdate.tar.gz
cd /usr/sbin/
tar zxvf ntpdate.tar.gz
文章来源:http://blog.s135.com/post/281/
Tags:
分页: 10/19 第一页 上页 5 6 7 8 9 10 11 12 13 14 下页 最后页 [ 显示模式: 摘要 | 列表 ]