crontab无法使用bash的build-in函数
[
|
2010/02/04 11:14]
|
2010/02/04 11:14]
操作系统:Debian cat /etc/debian_version squeeze/sid
事情这样地,写了一个脚本,里面有bash的内建命令,有for循环之类的。使用的时候发现无法执行。如果去掉for循环,直接执行命令,就OK,我就奇怪这是为什么?
仔细的查了一下,发现了原因。
ha01:~/bin# grep -v ^# /etc/crontab
MAILTO=root
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
ha01:/bin# ls -al /bin/sh
lrwxrwxrwx 1 root root 4 12月 1 12:45 sh -> dash
原因已经确认,debian默认crontab里面用的是dash而不是shell,那修改也就简单了。
ha01:~# rm /bin/sh
ha01:~# ln -s /bin/bash /bin/sh
事情这样地,写了一个脚本,里面有bash的内建命令,有for循环之类的。使用的时候发现无法执行。如果去掉for循环,直接执行命令,就OK,我就奇怪这是为什么?
仔细的查了一下,发现了原因。
ha01:~/bin# grep -v ^# /etc/crontab
MAILTO=root
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
ha01:/bin# ls -al /bin/sh
lrwxrwxrwx 1 root root 4 12月 1 12:45 sh -> dash
原因已经确认,debian默认crontab里面用的是dash而不是shell,那修改也就简单了。
ha01:~# rm /bin/sh
ha01:~# ln -s /bin/bash /bin/sh
ssh的tunnel的实例分析
[
|
2009/11/17 00:14]
|
2009/11/17 00:14]
参考链接:
http://secer.org/tech/depth-of-ssh-tunnel.html
ssh的隧道实例分析,总是看了一堆命令了,但是实际应用时总是搞错命令,下面就结合实际案例来写一下命令。
案例A:
主机ha01和ha02
1:在h02主机上操作,实现将ha01:80端口应用ssh隧道到本地ha02:12345
ssh -NCfg -L 12345:ha01:80 root@ha01
2:在ha02主机上操作,实现将ha02:80端口应用ssh隧道到远端ha01:12345
ssh -NCfg -R 12345:ha02:80 root@ha01
注意:
-g参数,只有在本地,也就是-L的时候,才开启监听所有端口;-R的时候,远端只监听127.0.0.1的端口。
案例B:
公司内网的主机代号INC-myhost,实现从外网穿透公司防火墙,直接访问到公司内网里面的主机。
实现方法:内网主机端口22与跳板主机端口12345建立隧道,通过ssh访问到跳板主机,在跳板主机访问127.0.0.1:12345到内网主机。
在内网主机上执行:
ssh -NCfg -R 12345:localhost:22 root@relaysrever.com
一些问题:实际操作中曾经报错,ssh_exchange_identification connection closed by remote host lost connection,尚未解决。当测试时内网主机为ubuntu9.04,外网主机为sles102时报错。当两台主机都是sles102时就没有问题。我尝试了/etc/hosts.allow、/etc/ssh/sshd_config的GatewayPorts yes等等,但是发现不是根本原因所在。但是肯定应该是ubuntu上的什么配置导致这个问题的呢?ubuntu上会报错connect_to relayserver port 22: failed.
http://secer.org/tech/depth-of-ssh-tunnel.html
ssh的隧道实例分析,总是看了一堆命令了,但是实际应用时总是搞错命令,下面就结合实际案例来写一下命令。
案例A:
主机ha01和ha02
1:在h02主机上操作,实现将ha01:80端口应用ssh隧道到本地ha02:12345
ssh -NCfg -L 12345:ha01:80 root@ha01
2:在ha02主机上操作,实现将ha02:80端口应用ssh隧道到远端ha01:12345
ssh -NCfg -R 12345:ha02:80 root@ha01
注意:
-g参数,只有在本地,也就是-L的时候,才开启监听所有端口;-R的时候,远端只监听127.0.0.1的端口。
案例B:
公司内网的主机代号INC-myhost,实现从外网穿透公司防火墙,直接访问到公司内网里面的主机。
实现方法:内网主机端口22与跳板主机端口12345建立隧道,通过ssh访问到跳板主机,在跳板主机访问127.0.0.1:12345到内网主机。
在内网主机上执行:
ssh -NCfg -R 12345:localhost:22 root@relaysrever.com
一些问题:实际操作中曾经报错,ssh_exchange_identification connection closed by remote host lost connection,尚未解决。当测试时内网主机为ubuntu9.04,外网主机为sles102时报错。当两台主机都是sles102时就没有问题。我尝试了/etc/hosts.allow、/etc/ssh/sshd_config的GatewayPorts yes等等,但是发现不是根本原因所在。但是肯定应该是ubuntu上的什么配置导致这个问题的呢?ubuntu上会报错connect_to relayserver port 22: failed.
内网下的主机如何获取最上层网关的公网地址?
[
|
2009/10/26 11:58]
|
2009/10/26 11:58]
当时记得做DDNS的时候就想到这个问题,如果我的服务器上,无法执行脚本,如果在内网的主机上写cron的脚本来更新最外层的ADSL猫自动拨号的IP地址呢。这个问题真是笨啊。其实我们根据像是那些IP查询信息的网址,配合wget就可以搞定了。
如下:
wget http://www.123cha.com
iconv -f gbk -t utf8 -o 123cha.html index.html
grep "http://www.123cha.com/ip/?q=" 123cha.html | cut -d'"' -f 2 | cut -d'=' -f 2
wget http://www.ip138.com/ips8.asp
iconv -f gbk -t utf8 -o ip138.html ips8.asp
grep "您的IP地址是" ip138.html | cut -d'[' -f 2 | cut -d']' -f 1
通过上面的方法,就可以实现了。有时间的话,整理一下成为一个脚本。
如下:
wget http://www.123cha.com
iconv -f gbk -t utf8 -o 123cha.html index.html
grep "http://www.123cha.com/ip/?q=" 123cha.html | cut -d'"' -f 2 | cut -d'=' -f 2
wget http://www.ip138.com/ips8.asp
iconv -f gbk -t utf8 -o ip138.html ips8.asp
grep "您的IP地址是" ip138.html | cut -d'[' -f 2 | cut -d']' -f 1
通过上面的方法,就可以实现了。有时间的话,整理一下成为一个脚本。
grub4dos的引导菜单
[
|
2009/10/17 00:17]
|
2009/10/17 00:17]
grub4dos的安装不再赘述,就是描述一下菜单的引导。
系统分区:
C盘SYS/30G/NTFS,D盘TMP/2G/fat32,E盘ProgFiles/50G/ntfs,F盘Media/160G/ntfs.
其中一些重要文件
C盘根目录下:grldr,menu.lst,FONT.GZ四个文件,用于grub4dos的引导。boot目录,则是存放引导硬盘安装的内核和镜像文件。
D盘临时目录:分区是fat32,本身用于存放临时文件,将BT4拷贝至此。
E盘:是应用程序安装,没有用于引导的内容。
F盘:是数据存放区,放置了引导用的ISO光盘
参考链接:
http://en.opensuse.org/Installation_using_images
https://wiki.ubuntu.com/drs305/Sandbox
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/en-US/RHEL510/Installation_Guide/ch-bootopts-x86.html
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/Installation_Guide-en-US/s1-kickstart2-startinginstall.html
系统分区:
C盘SYS/30G/NTFS,D盘TMP/2G/fat32,E盘ProgFiles/50G/ntfs,F盘Media/160G/ntfs.
其中一些重要文件
C盘根目录下:grldr,menu.lst,FONT.GZ四个文件,用于grub4dos的引导。boot目录,则是存放引导硬盘安装的内核和镜像文件。
D盘临时目录:分区是fat32,本身用于存放临时文件,将BT4拷贝至此。
E盘:是应用程序安装,没有用于引导的内容。
F盘:是数据存放区,放置了引导用的ISO光盘
参考链接:
http://en.opensuse.org/Installation_using_images
https://wiki.ubuntu.com/drs305/Sandbox
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/en-US/RHEL510/Installation_Guide/ch-bootopts-x86.html
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/Installation_Guide-en-US/s1-kickstart2-startinginstall.html
成功搞定蓝牙立体声耳机Jabar BT3030的连接问题
[
|
2009/08/29 19:23]
|
2009/08/29 19:23]
设备1:手机 HTC Touch Pro
系统是WM6.5,配对这个没有什么好说的,非常容易就搞定了。但是发现来电时候,无法接收到手机自带的铃声。G了半天,找到软件jetware_handsfree_extension,安装OK,里面有个选项,是将声音传输到蓝牙设备。勾选一下就OK了。记得重启一次。
设备2:笔记本 thinkpad-X200
配对这个就麻烦一点了,因为本人一直还用着罗技的V470的蓝牙鼠标。系统是winXP-SP3,默认安装的结构式,X200的基础蓝牙驱动-->罗技驱动setpoint.经摸索后,经如下操作成功同时连接耳机和V470。
首先去thinkpad下载:
Thinkpad -- Bluetooth with Enhanced Data Rate II 软件(Windows XP)
下载完成后,在上面的条件下安装此蓝牙软件即可,然后卸载setpoint,重启,再安装setpoint,重新配对V470,OK!
然后连接你的耳机吧。两个选项,耳机和麦克,都支持就O了。爽!
系统是WM6.5,配对这个没有什么好说的,非常容易就搞定了。但是发现来电时候,无法接收到手机自带的铃声。G了半天,找到软件jetware_handsfree_extension,安装OK,里面有个选项,是将声音传输到蓝牙设备。勾选一下就OK了。记得重启一次。
设备2:笔记本 thinkpad-X200
配对这个就麻烦一点了,因为本人一直还用着罗技的V470的蓝牙鼠标。系统是winXP-SP3,默认安装的结构式,X200的基础蓝牙驱动-->罗技驱动setpoint.经摸索后,经如下操作成功同时连接耳机和V470。
首先去thinkpad下载:
Thinkpad -- Bluetooth with Enhanced Data Rate II 软件(Windows XP)
下载完成后,在上面的条件下安装此蓝牙软件即可,然后卸载setpoint,重启,再安装setpoint,重新配对V470,OK!
然后连接你的耳机吧。两个选项,耳机和麦克,都支持就O了。爽!





