问题:rontab里最小的时间单位是分钟,我用*/120,想让每半分钟执行一次,也不行啊。
比如同步:
/data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
/usr/bin/php /data/htdocs/t.jackxiang.com/getNowTempValueFromCom.php
简单实现让一个进程去读取串口的操作,这样通过循环读取出来的数据值也就更快更准,否则多个去读容易读乱了,主要是用的while去循环读取这块要是c可能select去操作:
回答:我想应该是不行的,因为 cron 每分钟才读一次配置文件,看哪些命令要执行,精度应该不能再高了。
有没有其他的解决方案:
这种思路挺巧妙的
但为什么不设置成开机后就启动这个脚本,然后在脚本里面控制间隔呢。
换个思路如下:
方法1:
两个脚本
1个正常,一个sleep30
crontab设置同时启动,想到的只有这个办法了
让其中一个脚本睡眠30秒,另一个正常运行
举例
a.sh是你的脚本
再写一个b.sh
内容如下:
sleep 30
a.sh
然后在cron中把这两个脚本都加进去,设置一样的启动条件(分钟是*)
shell知识:
在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小时)
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时
方法2:
TenSecend.sh
方法3:
* * * * * cmd
* * * * * (sleep 10 && cmd)
* * * * * (sleep 20 && cmd)
* * * * * (sleep 30 && cmd)
* * * * * (sleep 40 && cmd)
* * * * * (sleep 50 && cmd)
这样就可以了,这是个简单的问题,而我没有在Jackxiang上得到答案,看来绝对是我描述问题的方法有问题. 下次定要记得把问题说清楚,这样各位朋友才好帮到我,呵呵~
你可以不停的使用
at
batch
不过得保证10秒程序执行完。
=====================踩坑记录-crontab每10秒执行一次==================================
写在前面,记录一个linux小白使用crontab中遇到的各种坑及解决思路方法。网上帖子千千万,坑也是千千万。记录下,分享给大家。
需求:linux中使用crontab每十秒执行一次
场景:需要在ubuntu14服务器中使用代理每十秒执行一次curl来访问互联网,来测试代理网络稳定性。
经过网上的大量搜贴之后得到的可用的一个结论如下:
# crontab -e
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 20; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 30; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 40; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 50; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
如果你是直接一梭子全复制,改下目录那么恭喜你完成了计划任务。而我就不是了,我只写了sleep 10 这条然后任务没有执行。这就是坑。
坑1 .上面sleep 10 20 30 ...是啥意思啊,怎么个规则啊。一头雾水,当时我是直接把第二个sleep 10 那个定时任务直接粘进去的。然后,任务没有执行就一直纠结任务没有执行这个问题。
坑2.ubuntu系统第一次使用crontab -e 需要选择比编辑器,如果选nano上,对我这种小白可就蒙圈。最后在命令行使用, select-ediort 来选择编辑器选3 vim 就好了
后来,明白后做了实验。
如果只写前两条的话是:在每分钟的第一秒和第一个10秒执行一次
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
以此类推只写前三的话就是:在每分钟的第一、第一个十秒、第二个十秒分别执行一次
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 20; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
如果都写上的话就是每十秒执行一次啦,完美过程。
过程遇到的问题(1):crontab -e 完都有新邮件
原因:1.crontab 每次执行完程序产生的输出都会发邮件到/var/mail/root
2.定时任务语法有误,/var/mail/root 发送的是错误日志,如下
root@bogon:/usr/local# tail -20 /var/mail/root
From root@bogon Tue May 21 18:31:11 2019
Return-Path: <root@bogon>
X-Original-To: root
Delivered-To: root@bogon
Received: by bogon (Postfix, from userid 0)
id AAFCB43077; Tue, 21 May 2019 18:31:11 +0800 (CST)
From: root@bogon (Cron Daemon)
To: root@bogon
Subject: Cron <root@bogon> sleep 10; sh /home/liuxin/curl-status.sh >dev/null 2>&1
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
Message-Id: <20190521103111.AAFCB43077@bogon>
Date: Tue, 21 May 2019 18:31:11 +0800 (CST)
/bin/sh: 1: cannot create dev/null: Directory nonexistent
解决:如果是1的话就放到黑洞 >/dev/null 2>&1
* * * * * /usr/local/cc.sh >/dev/null 2>&1
精讲:1,/dev/null是linux系统的一个垃圾桶(一个不正经的比喻)有不用的输出都可以往里面扔。>/dev/null 缺省默认是1 即 1>/dev/null
2,linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2 2>&1就是把2错误输出重定向到1标准输出 而1又输出到/dev/null黑洞
如果不想输出到一个文件可以这样写
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
过程中遇到的问题(2):如图crontab -e 后是新文件
解决:crontab语法错误再三检查后,建议select-editor 选3 vim
来自:https://mp.weixin.qq.com/s/CoWxVO5wlsJcIhv9a8sdKQ
比如同步:
/data/htdocs/t.jackxiang.com/shell/getNowTempValueFromCom.sh
/usr/bin/php /data/htdocs/t.jackxiang.com/getNowTempValueFromCom.php
简单实现让一个进程去读取串口的操作,这样通过循环读取出来的数据值也就更快更准,否则多个去读容易读乱了,主要是用的while去循环读取这块要是c可能select去操作:
回答:我想应该是不行的,因为 cron 每分钟才读一次配置文件,看哪些命令要执行,精度应该不能再高了。
有没有其他的解决方案:
这种思路挺巧妙的
但为什么不设置成开机后就启动这个脚本,然后在脚本里面控制间隔呢。
换个思路如下:
方法1:
两个脚本
1个正常,一个sleep30
crontab设置同时启动,想到的只有这个办法了
让其中一个脚本睡眠30秒,另一个正常运行
举例
a.sh是你的脚本
再写一个b.sh
内容如下:
sleep 30
a.sh
然后在cron中把这两个脚本都加进去,设置一样的启动条件(分钟是*)
shell知识:
在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小时)
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时
方法2:
TenSecend.sh
方法3:
* * * * * cmd
* * * * * (sleep 10 && cmd)
* * * * * (sleep 20 && cmd)
* * * * * (sleep 30 && cmd)
* * * * * (sleep 40 && cmd)
* * * * * (sleep 50 && cmd)
这样就可以了,这是个简单的问题,而我没有在Jackxiang上得到答案,看来绝对是我描述问题的方法有问题. 下次定要记得把问题说清楚,这样各位朋友才好帮到我,呵呵~
你可以不停的使用
at
batch
不过得保证10秒程序执行完。
=====================踩坑记录-crontab每10秒执行一次==================================
写在前面,记录一个linux小白使用crontab中遇到的各种坑及解决思路方法。网上帖子千千万,坑也是千千万。记录下,分享给大家。
需求:linux中使用crontab每十秒执行一次
场景:需要在ubuntu14服务器中使用代理每十秒执行一次curl来访问互联网,来测试代理网络稳定性。
经过网上的大量搜贴之后得到的可用的一个结论如下:
# crontab -e
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 20; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 30; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 40; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 50; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
如果你是直接一梭子全复制,改下目录那么恭喜你完成了计划任务。而我就不是了,我只写了sleep 10 这条然后任务没有执行。这就是坑。
坑1 .上面sleep 10 20 30 ...是啥意思啊,怎么个规则啊。一头雾水,当时我是直接把第二个sleep 10 那个定时任务直接粘进去的。然后,任务没有执行就一直纠结任务没有执行这个问题。
坑2.ubuntu系统第一次使用crontab -e 需要选择比编辑器,如果选nano上,对我这种小白可就蒙圈。最后在命令行使用, select-ediort 来选择编辑器选3 vim 就好了
后来,明白后做了实验。
如果只写前两条的话是:在每分钟的第一秒和第一个10秒执行一次
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
以此类推只写前三的话就是:在每分钟的第一、第一个十秒、第二个十秒分别执行一次
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 20; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
如果都写上的话就是每十秒执行一次啦,完美过程。
过程遇到的问题(1):crontab -e 完都有新邮件
原因:1.crontab 每次执行完程序产生的输出都会发邮件到/var/mail/root
2.定时任务语法有误,/var/mail/root 发送的是错误日志,如下
root@bogon:/usr/local# tail -20 /var/mail/root
From root@bogon Tue May 21 18:31:11 2019
Return-Path: <root@bogon>
X-Original-To: root
Delivered-To: root@bogon
Received: by bogon (Postfix, from userid 0)
id AAFCB43077; Tue, 21 May 2019 18:31:11 +0800 (CST)
From: root@bogon (Cron Daemon)
To: root@bogon
Subject: Cron <root@bogon> sleep 10; sh /home/liuxin/curl-status.sh >dev/null 2>&1
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
Message-Id: <20190521103111.AAFCB43077@bogon>
Date: Tue, 21 May 2019 18:31:11 +0800 (CST)
/bin/sh: 1: cannot create dev/null: Directory nonexistent
解决:如果是1的话就放到黑洞 >/dev/null 2>&1
* * * * * /usr/local/cc.sh >/dev/null 2>&1
精讲:1,/dev/null是linux系统的一个垃圾桶(一个不正经的比喻)有不用的输出都可以往里面扔。>/dev/null 缺省默认是1 即 1>/dev/null
2,linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2 2>&1就是把2错误输出重定向到1标准输出 而1又输出到/dev/null黑洞
如果不想输出到一个文件可以这样写
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
过程中遇到的问题(2):如图crontab -e 后是新文件
解决:crontab语法错误再三检查后,建议select-editor 选3 vim
来自:https://mp.weixin.qq.com/s/CoWxVO5wlsJcIhv9a8sdKQ
mysql消除乱码方法集
我用php+mysql做系统的时候发现数据库的汉字在数据库里是显示正常的,但是一旦数据库与php连接,汉字就会显示为???多个问号,一直都在想办法解决它,但是试了好包括修改php 还有mysql配置文件的默认字体,还有在建html时的字体的设置,但是都不行,今天突然在网上看到有说用 这中方法可以的。1.在使用MySQL和php的时候出现过中文乱码问题 阅读全文
我用php+mysql做系统的时候发现数据库的汉字在数据库里是显示正常的,但是一旦数据库与php连接,汉字就会显示为???多个问号,一直都在想办法解决它,但是试了好包括修改php 还有mysql配置文件的默认字体,还有在建html时的字体的设置,但是都不行,今天突然在网上看到有说用 这中方法可以的。1.在使用MySQL和php的时候出现过中文乱码问题 阅读全文
有很长一段时间一直以为empty应该是能够判断一个东西是否为空的,直到有一天我像这样“empty(trim($a))”使用的时候出现了error,然后查手册才知道了原来empty函数只能判断一个变量是否为空,而不能判断一个字符串(或者其他的值,包括函数返回值)为空。虽然知道了这只是一个表层的原因,但是却没有再去了解深层次的原因。 阅读全文
实践证明上面这两个都会指向编译时的mysqld.sock文件位置:
php -i|grep mysqld.sock
'--with-mysql-sock=/var/run/myslqd/mysqld.sock'
mysqli.default_socket => /var/run/myslqd/mysqld.sock => /var/run/myslqd/mysqld.sock
pdo_mysql.default_socket => /var/run/myslqd/mysqld.sock => /var/run/myslqd/mysqld.sock
PDO连接Mysql出现如下:Connection failed: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/usr/local/webserver/mysql/data/mysql.sock' (2)
如下命令编译php后,注意其中有一行是涉及到PDO和MysqlLi的--with-pdo-mysql=/usr/local/webserver/mysql
编译PHP:
wget http://cn.php.net/distributions/php-5.3.6.tar.gz
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl
老外这样说的:configure --with-pdo-mysql --with-mysql-sock=/usr/local/webserver/mysql/data/mysql.sock... This value can either be set at compile time if a domain socket is found at configure.
在:--socket=/data0/data/mysql.sock ,这时你一是可以建立软链接
这儿是可以重新编译一次PDO来实现,二是能通过软链接来实现,重新编译PDO如下:
PDO_MYSQL:
http://pecl.php.net/package/PDO_MYSQL
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql
make
make install
cd ../
要么你直接在编译PHP源代码时编译进去,这儿单独编译时可能会找不到mysql.h,造成上面一一致的原因是我修改了原来Mysql默认的配置:mysql.sock的Path,同时修改了PHP里的Mysql常规Path,而这个PDO的PAth没有在PHP.ini里体现出来,没法修改,只有建立软链接或者重新编译才行。这就是根本原因。
(1)直接建立软链接指向其位置:ln -s /data0/data/mysql.sock /usr/local/webserver/mysql/data/mysql.sock 立竿见影。
(2)重新编译PDO【注意把:mysql.sock设置一下位置,让PDO知道不是以前的那个位Path了】
(3)这儿发现第三种方法,修改好编译好的二进制so文件:
vi /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/pdo_mysql.so
找到那个写死了的mysql.sock的配置处,把路径给修改下,再修改回去,呵呵,如下:
@^@^@/root/jackxiang.com/PDO_MYSQL-1.0.2/mysql_driver.c^@^@/usr/local/webserver/mysql/data/mysql.sock^@^@
修改为这样:
@/root/jackxiang.com/PDO_MYSQL-1.0.2/mysql_driver.c^@^@/data0/data/mysql.sock^@^@/root/jackxiang.com
强制写入,这时,我用的是Nginx下Php的FastCGI,得重启下PHPFastCGI,而要是Apache得重启下Apache即可。
这儿的修改可能有些问题:
root@116.255.139.240:/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626# sh /root/runphp.sh
Starting php-fpm /etc/init.d/phpfpm: line 53: 12947 Segmentation fault $php_fpm_BIN $php_opts
failed
但是说明一个问题:这个配置/usr/local/webserver/mysql/data/mysql.sock确实是写死在这个:pdo_mysql.so 文件里的!!!
php -i|grep mysql.sock得到如下两个设置的地方,
mysql.default_socket => /data0/data/mysql.sock => /data0/data/mysql.sock //常规的Mysql的句柄,和下面不一样导致,pdo报错。
MYSQLI_SOCKET => /usr/local/webserver/mysql/data/mysql.sock //PDO的Mysql句柄
为何这上面两个不一样呢?请查看: php连接到MySQL数据库服务器时三种主要的API:mysql,mysqli,pdo区别及联系
PHP用PDO连接Mysql时出现问题,PHP代码如下:
<?php
$dsn = "mysql:host=localhost;dbname=360syn_mysql";
$db = new PDO($dsn, 'root', '');
root@116.255.139.240:/data0/htdocs/happycun.com# php pdo.php
PHP PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/usr/local/webserver/mysql/data/mysql.sock' (2) in /data0/htdocs/happycun.com/pdo.php on line 3
也就是这个设置不对:MYSQLI_SOCKET => /usr/local/webserver/mysql/data/mysql.sock
查看Mysql的mysql.sock是在哪儿?如下命令查看:
ps aux|grep mysql
/usr/local/webserver/mysql/bin/mysqld --basedir=/usr/local/webserver/mysql --datadir=/data0/data --plugin-dir=/usr/local/webserver/mysql/lib/plugin --user=mysql --log-error=/data0/data/error_log/log-error.log --pid-file=/data0/data/localhost.localdomain.pid --socket=/data0/data/mysql.sock --port=3306
是谁不小心把/tmp/mysql.sock删除了,最后建立软连接才好了!
原因:
其本质是在编译Mysql的时候可能此时mysql.sock是在/tmp/mysql.sock,而可能在实际配置Mysql的时候,vi /etc/my.cnf 其定义到了:/usr/local/services/mysql-5.0.2*/var/mysql.sock
---------------------
来源网上:
摘要:解决不能通过mysql .sock连接MySQL问题 这个问题主要提示是,不能通过 '/tmp/mysql .sock'连到服务器,而php标准配置正是用过'/tmp/mysql .sock',但是一些mysql 安装方法 将 mysql .sock放在/var/lib/mysql .sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,可以看到如下的东东: [mysql d] socket=/var/lib/mysql .sock 改一下就好了,但也会引起其他的问题,如mysql 程序连不上了,再加一点: [mysql ] socket=/tmp/mysql .sock 或者还可以通过修改php.ini中的配置来使php用其他的mysql .sock来连,这个大家自己去找找 或者用这样的方法: ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock 成功了,就是这样ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock OK!
[mysqld]
socket=/var/lib/mysql.sock
改一下就好了,但也会引起其他的问题,如mysql程序连不上了,再加一点:
[mysql]
socket=/tmp/mysql.sock
或者还可以通过修改php.ini中的配置来使php用其他的mysql.sock来连:
On my RedHat-Box the socket of mysql is /var/lib/mysql/mysql.sock. In your php.ini you will find a line
mysql.default_socket = /tmp/mysql.sock
change it to
mysql.default_socket = /var/lib/mysql/mysql.sock
Then restart apache and it will work.
---
如果做了软链接依旧连接不上,提示PHP连接mysql找不到'/tmp/mysql.sock,请参阅Mysql绑定端口引发的:ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1':
http://jackxiang.com/post/4305/
MYSQL 5.5 中安装BOBLOG,结果安装到最后一步时,出现SQL语句错误。查看错误发现是BOBLOG使用了SQL语句“TYPE=MYISAM”来设定存储引擎,但是在5.5中这个语句已经不在支持了。
解决方法也很简单,找到install/install.php,把其中的TYPE替换为ENGINE即可。
-------
MYSQL 5.5 已经默认是INNODB,还得注意。
解决方法也很简单,找到install/install.php,把其中的TYPE替换为ENGINE即可。
-------
MYSQL 5.5 已经默认是INNODB,还得注意。
通过 lsb_release -a命令可以看出我的linux的发行版是CentOS release 5.6 (Final) 默认是没有安装无线网卡驱动的,但是需要使用无线网,没办法,那要自己安装驱动了!
我的笔记本是MSI U90/100 上网本,到官网查看了相关的信息,只显示了802.11b/g没有具体的商家信息,然后我通过lspci -v 查看到了我的网卡是Network controller: RaLink RT2860
到RaLink官网,很遗憾网站打不开,只能通过google搜索,找到了一个可以下载的,Ralink_RT3562_Linux_STA_2.3.0.0.tar.bz2(支持RT2860)[下载地址:http://down9.zol.com.cn/wuxianlan/Ralink_RT3562_Linux_STA_2.3.0.0.tar.bz2?key=216802e3cb50f87f86cd04b5bf5de5cf ]
通过多次尝试,还需要网卡的固件,最新的版本是rt2860-firmware-11,必须要安装,否则即使安装的驱动,也会报错,[下载地址:http://elrepo.org/linux/elrepo/el5/i386/RPMS/rt2860-firmware-11-1.elrepo.noarch.rpm]
阅读全文
我的笔记本是MSI U90/100 上网本,到官网查看了相关的信息,只显示了802.11b/g没有具体的商家信息,然后我通过lspci -v 查看到了我的网卡是Network controller: RaLink RT2860
到RaLink官网,很遗憾网站打不开,只能通过google搜索,找到了一个可以下载的,Ralink_RT3562_Linux_STA_2.3.0.0.tar.bz2(支持RT2860)[下载地址:http://down9.zol.com.cn/wuxianlan/Ralink_RT3562_Linux_STA_2.3.0.0.tar.bz2?key=216802e3cb50f87f86cd04b5bf5de5cf ]
通过多次尝试,还需要网卡的固件,最新的版本是rt2860-firmware-11,必须要安装,否则即使安装的驱动,也会报错,[下载地址:http://elrepo.org/linux/elrepo/el5/i386/RPMS/rt2860-firmware-11-1.elrepo.noarch.rpm]
阅读全文
用Php分析并绘制音频文件的波形图,网上还是很少见到。其实只要根据wav文件的规范,用Php的fseek,fopen,fopen,pack/unpack等函数,以及强大的gd图形库,这些都是很容易的。很多人可能对pack/unpack函数不熟悉;这其实是Php借用perl的,他们提供了使用脚本语言访问复杂二进制数据结构的方法。我的这段简化的程序只能处理PCM格式的RIFF音频文件(这也是最常见的wav格式) ,不限声道,但是比特率(BitsPerSample)最好是16。
这里有wave file format 和 MicroSoft wave soundfile format可以参考。这里是一个实际的例子(下载放大看)
阅读全文
这里有wave file format 和 MicroSoft wave soundfile format可以参考。这里是一个实际的例子(下载放大看)
阅读全文
Linux下方便的socket读写查看器(socktop)
晚上找个工具来调查下unix域套接字的发送和接受情况,比如说A程序是否送出,B程序是否接收到,他找了tcpdump ,wireshark什么的,貌似都不支持。
这时候还是伟大的systemtap来救助了。 因为所有的socket通讯都是通过socket接口来的,任何family的通讯包括unix域套接都要走的,所以只要截获了socket 读写的几个syscall 就搞定了.
systemtap发行版本提供了个工具socktop, 位于 /usr/share/doc/systemtap/examples/network/socktop, 是个非常方便的工具, 干这个事情最合适了。阅读全文
晚上找个工具来调查下unix域套接字的发送和接受情况,比如说A程序是否送出,B程序是否接收到,他找了tcpdump ,wireshark什么的,貌似都不支持。
这时候还是伟大的systemtap来救助了。 因为所有的socket通讯都是通过socket接口来的,任何family的通讯包括unix域套接都要走的,所以只要截获了socket 读写的几个syscall 就搞定了.
systemtap发行版本提供了个工具socktop, 位于 /usr/share/doc/systemtap/examples/network/socktop, 是个非常方便的工具, 干这个事情最合适了。阅读全文
兼容:firefox/chrome的写法:<link href='/favicon.ico' rel='shortcut icon' type='image/x-icon'/>
如何安装Favicon
当成功生成favicon.ico图像文件后,浏览器会自动弹出一个zip的压缩文件
将压缩文件中的favicon.ico图像放在根目录下(也可以是其他目录)
在页面源文件的<head></head>标签之间插入
<link rel="shortcut icon" href=" /favicon.ico" />
最后形成:
<head>
...
<link rel="shortcut icon" href="/favicon.ico" />
</head>
==========================================
设置网站ico图标的两种方法
方法一:
直接在站点根目录下放入名为:favicon.ico 的图标文件(必须要为 ICO 文件,BMP 及其他格式的图片文件不行)。还有将 favicon.ico 中的 favicon 命名为你网站域名的名称也可以,例如:你网站的域名为:xll.com,你可以将该 ICO 文件命名为:xll.ico 。其IE地址栏图标绝对地址就可以为:http://www.jackxiang.com/favicon.ico和http://www.jackxiang.com/jackxiang.ico
方法二:
在网页的 <head>...</head> 区加入代码:<link rel="Shortcut Icon" href="favicon.ico" />,如果用这一种方法的话,其中 ICO 文件的文件名就不一定要用 favicon.ico了,可以用任意的名字来命名,如:aoul.ico,你甚至可以使每一个目录下的每一个网页文件的IE地址栏图标都不同,但前提是必须做到图标文件的链接地址要正确。还有,在 <head>...</head> 区加入代码:<link rel="Bookmark" href="favicon.ico" />,就可以在收藏夹中显示你网页链接的自定义图标。
我使用:<link rel="shortcut icon" href="./jackxiang.ico" type="image/x-icon" /> 就Ok了。
==========================================
http://wstool.jackxiang.com/favicon.ico
icon压缩:
https://www.aconvert.com/cn/image/ico-to-jpg/
gzip压缩测试:
http://pagespeed.webkaka.com/youhua/gzip/
如何安装Favicon
当成功生成favicon.ico图像文件后,浏览器会自动弹出一个zip的压缩文件
将压缩文件中的favicon.ico图像放在根目录下(也可以是其他目录)
在页面源文件的<head></head>标签之间插入
<link rel="shortcut icon" href=" /favicon.ico" />
最后形成:
<head>
...
<link rel="shortcut icon" href="/favicon.ico" />
</head>
==========================================
设置网站ico图标的两种方法
方法一:
直接在站点根目录下放入名为:favicon.ico 的图标文件(必须要为 ICO 文件,BMP 及其他格式的图片文件不行)。还有将 favicon.ico 中的 favicon 命名为你网站域名的名称也可以,例如:你网站的域名为:xll.com,你可以将该 ICO 文件命名为:xll.ico 。其IE地址栏图标绝对地址就可以为:http://www.jackxiang.com/favicon.ico和http://www.jackxiang.com/jackxiang.ico
方法二:
在网页的 <head>...</head> 区加入代码:<link rel="Shortcut Icon" href="favicon.ico" />,如果用这一种方法的话,其中 ICO 文件的文件名就不一定要用 favicon.ico了,可以用任意的名字来命名,如:aoul.ico,你甚至可以使每一个目录下的每一个网页文件的IE地址栏图标都不同,但前提是必须做到图标文件的链接地址要正确。还有,在 <head>...</head> 区加入代码:<link rel="Bookmark" href="favicon.ico" />,就可以在收藏夹中显示你网页链接的自定义图标。
我使用:<link rel="shortcut icon" href="./jackxiang.ico" type="image/x-icon" /> 就Ok了。
==========================================
http://wstool.jackxiang.com/favicon.ico
icon压缩:
https://www.aconvert.com/cn/image/ico-to-jpg/
gzip压缩测试:
http://pagespeed.webkaka.com/youhua/gzip/
用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一款工具。
Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86, amd64和ppc32架构上。valgrind包含一个核心,它提供一个虚拟的CPU运行程序,还有一系列的工具,它们完成调试,剖析和一些类似的任务。valgrind是高度模块化的,所以开发人员或者用户可以给它添加新的工具而不会损坏己有的结构。
valgrind的官方网址是:http://valgrind.org
你可以在它的网站上下载到最新的valgrind,它是开放源码和免费的。 阅读全文
Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86, amd64和ppc32架构上。valgrind包含一个核心,它提供一个虚拟的CPU运行程序,还有一系列的工具,它们完成调试,剖析和一些类似的任务。valgrind是高度模块化的,所以开发人员或者用户可以给它添加新的工具而不会损坏己有的结构。
valgrind的官方网址是:http://valgrind.org
你可以在它的网站上下载到最新的valgrind,它是开放源码和免费的。 阅读全文
安装了两个vim的大型插件,分别是csupport和perl-support,每一个都是几百k。但是这两个插件让我的vim启动速度明显变慢,大概需要两秒。而不使用这两个插件,几乎是瞬间启动。
经过观察,不管用vim打开什么文件,这两个插件都会启动。去vim的安装目录vimfiles/plugin一看,果然,有两个超过100k的.vim文件,分别是c.vim和perl-support.vim。应就是他们两个拖慢了vim的启动速度。也正是因为他们两个被放在了plugin文件夹,所以才会不管打开什么文件,这两个插件都会启动。
安装了两个vim的大型插件,分别是csupport和perl-support,每一个都是几百k。但是这两个插件让我的vim启动速度明显变慢,大概需要两秒。而不使用这两个插件,几乎是瞬间启动。
经过观察,不管用vim打开什么文件,这两个插件都会启动。去vim的安装目录vimfiles/plugin一看,果然,有两个超过100k的.vim文件,分别是c.vim和perl-support.vim。应就是他们两个拖慢了vim的启动速度。也正是因为他们两个被放在了plugin文件夹,所以才会不管打开什么文件,这两个插件都会启动。
所以,将c.vim改名为c_c.vim移动到vimfiles/ftplugin。将perl-support.vim改名perl_support.vim为移动到vimfiles/ftplugin。现在,这两个插件可以“伺机”启动啦。
自己试了下移动,果然Vim快多了好多,移动情况如下:
解释vimfiles:
vimfiles相当于用户自己的一个配置文件夹,而vim73相当于是安装目录。
vim73中的plugin何vimfiles中的plugin作用是一样的,插件放到这2个文件夹都会起作用。
建议把后安装的插件都放到vimfiles中,备份起来比较容易。
Unix 下的 $HOME/.vim/after 或 Windows 下的 %HOME%/vimfiles/after: 用于对已有设置进行一些小的修正和覆写。
Unix 下的 $HOME/.vim 或 Windows 下的 %HOME%/vimfiles: 用户自定义脚本及插件。 该目录下的脚本会在系统脚本加载前执行, 用于扩展与替代系统脚本原有功能。
所以,将c.vim改名为c_c.vim移动到vimfiles/ftplugin。将perl-support.vim改名perl_support.vim为移动到vimfiles/ftplugin。现在,这两个插件可以“伺机”启动啦。
插件实在是太多了:
code_complete.vim
cppcomplete.vim
exec_menuitem.vim
fs_menu.vim
NERD_tree.vim
supertab.vim
taglist.vim
没有试过,作为参考。
经过观察,不管用vim打开什么文件,这两个插件都会启动。去vim的安装目录vimfiles/plugin一看,果然,有两个超过100k的.vim文件,分别是c.vim和perl-support.vim。应就是他们两个拖慢了vim的启动速度。也正是因为他们两个被放在了plugin文件夹,所以才会不管打开什么文件,这两个插件都会启动。
安装了两个vim的大型插件,分别是csupport和perl-support,每一个都是几百k。但是这两个插件让我的vim启动速度明显变慢,大概需要两秒。而不使用这两个插件,几乎是瞬间启动。
经过观察,不管用vim打开什么文件,这两个插件都会启动。去vim的安装目录vimfiles/plugin一看,果然,有两个超过100k的.vim文件,分别是c.vim和perl-support.vim。应就是他们两个拖慢了vim的启动速度。也正是因为他们两个被放在了plugin文件夹,所以才会不管打开什么文件,这两个插件都会启动。
所以,将c.vim改名为c_c.vim移动到vimfiles/ftplugin。将perl-support.vim改名perl_support.vim为移动到vimfiles/ftplugin。现在,这两个插件可以“伺机”启动啦。
自己试了下移动,果然Vim快多了好多,移动情况如下:
解释vimfiles:
vimfiles相当于用户自己的一个配置文件夹,而vim73相当于是安装目录。
vim73中的plugin何vimfiles中的plugin作用是一样的,插件放到这2个文件夹都会起作用。
建议把后安装的插件都放到vimfiles中,备份起来比较容易。
Unix 下的 $HOME/.vim/after 或 Windows 下的 %HOME%/vimfiles/after: 用于对已有设置进行一些小的修正和覆写。
Unix 下的 $HOME/.vim 或 Windows 下的 %HOME%/vimfiles: 用户自定义脚本及插件。 该目录下的脚本会在系统脚本加载前执行, 用于扩展与替代系统脚本原有功能。
所以,将c.vim改名为c_c.vim移动到vimfiles/ftplugin。将perl-support.vim改名perl_support.vim为移动到vimfiles/ftplugin。现在,这两个插件可以“伺机”启动啦。
插件实在是太多了:
code_complete.vim
cppcomplete.vim
exec_menuitem.vim
fs_menu.vim
NERD_tree.vim
supertab.vim
taglist.vim
没有试过,作为参考。
蓝金伟 說:
民大的学生你还有联系的么
向东阳 說:
哪个学生?
蓝金伟 說:
下几届还有认识的没, 我想看看能不能找几个实习生
向东阳 說:
计算机的?
专业的。
蓝金伟 說:
不一定
理科的
向东阳 說:
喔,我问问哈。
搞什么语言的。
蓝金伟 說:
恩
php的
向东阳 說:
在北京 哪儿?
蓝金伟 說:
北京
向东阳 說:
招几人?
不会PHP也没有关系吧?哈哈。
蓝金伟 說:
没关系
2,3人
向东阳 說:
嗯,我给问问。。。
蓝金伟 說:
恩
向东阳 說:
现在在哪儿上班了,还要招人。
蓝金伟 說:
卓望信息
向东阳 說:
实习生有工资吧?多少钱。
蓝金伟 說:
看能力
请把简历发我邮箱:xdy108@126.com
民大的学生你还有联系的么
向东阳 說:
哪个学生?
蓝金伟 說:
下几届还有认识的没, 我想看看能不能找几个实习生
向东阳 說:
计算机的?
专业的。
蓝金伟 說:
不一定
理科的
向东阳 說:
喔,我问问哈。
搞什么语言的。
蓝金伟 說:
恩
php的
向东阳 說:
在北京 哪儿?
蓝金伟 說:
北京
向东阳 說:
招几人?
不会PHP也没有关系吧?哈哈。
蓝金伟 說:
没关系
2,3人
向东阳 說:
嗯,我给问问。。。
蓝金伟 說:
恩
向东阳 說:
现在在哪儿上班了,还要招人。
蓝金伟 說:
卓望信息
向东阳 說:
实习生有工资吧?多少钱。
蓝金伟 說:
看能力
请把简历发我邮箱:xdy108@126.com
就一个晚上,博客垃圾留言就达到3286条,太恐怖了。还好,昨天在关电脑前设置了所有发言都需审核。Bo-blog官方论坛说,Bo-blog主程序目前有防止大量垃圾发言的有效补丁,我也安装了,但是依旧有上千条,我都不知道Bo-Blog新发的补丁有验证码和自动识别还是有这么多的垃圾留言,难道真有人自动填写验证码的一个产业链的形成,我看是无法避免喽,所以,面对如此大规模的轰炸,我们该怎么办呢?
不懂博客的我,不得不采取宁可错杀1万,不可放过1个的安全策略——
进入后台 -> 数据维护 -> MySQL -> 复制下列语句 -> 确定(以下语句,请对号入座、谨慎操作!)
批量删除未审核评论
批量删除未审核留言
delete from [db]messages where reproperty=2
批量删除已审核评论(危险,谨慎操作)
delete from [db]replies where reproperty=0
批量删除未审核引用
delete from [db]replies where reproperty=5
批量删除已审核引用
delete from [db]replies where reproperty=4
SQL操作:
Delete it:
不懂博客的我,不得不采取宁可错杀1万,不可放过1个的安全策略——
进入后台 -> 数据维护 -> MySQL -> 复制下列语句 -> 确定(以下语句,请对号入座、谨慎操作!)
批量删除未审核评论
批量删除未审核留言
delete from [db]messages where reproperty=2
批量删除已审核评论(危险,谨慎操作)
delete from [db]replies where reproperty=0
批量删除未审核引用
delete from [db]replies where reproperty=5
批量删除已审核引用
delete from [db]replies where reproperty=4
SQL操作:
Delete it:
尽管QQ有简单的截图功能,但是在家不是一开机就上QQ,网页如查询邮寄的包裹什么的,还得截图方便,IE有一款截图插件,值得推荐,名字叫:LightShot for Internet Explorer
下载地址:
http://www.525down.com/soft_info/26506.html
下载地址:
http://www.525down.com/soft_info/26506.html
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
修改my.cnf
1. 注释掉 # skip-networking
2. 给MYSQL绑定IP bind-address = 192.168.25.5 # server IP address
重启mysql.
我的处理:
1.去掉:bind-address = 192.168.25.5
2. 修改 PHPMyadmin:
/phpmyadmin # vi ./libraries/auth/cookie.auth.lib.php
$default_server = '127.0.0.1:3306'; 为: $default_server = 'localhost:3306';
为何要修改的原因是Shell下执行的情况出现了:
/usr/local/mysql/bin # mysql -h127.0.0.1 -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111),也正是PHPMYADMIN报错的内容。
典型的反其道而行之,哈哈。
本质是:机器的IP,Localhost,127.0.0.1,在/etc/hosts的指向,以及Mysql是否绑定端口。
Lost connection to MySQL server at ‘reading initial communication packet’, system error: 111
最近遇到一个比较少见的问题,php连接mySQL的时候,会报错
Lost connection to MySQL server at ‘reading initial communication packet’, system error: 111
这种现象还不是不断重复的,出现的频率不确定,疑似mySQL数据丢包。google之后,得到解决办法,通过修改my.cnf
1. 注释掉 # skip-networking
2. 给MYSQL绑定IP bind-address = 123.88.88.88 # server IP address
修改my.cnf
1. 注释掉 # skip-networking
2. 给MYSQL绑定IP bind-address = 192.168.25.5 # server IP address
重启mysql.
我的处理:
1.去掉:bind-address = 192.168.25.5
2. 修改 PHPMyadmin:
/phpmyadmin # vi ./libraries/auth/cookie.auth.lib.php
$default_server = '127.0.0.1:3306'; 为: $default_server = 'localhost:3306';
为何要修改的原因是Shell下执行的情况出现了:
/usr/local/mysql/bin # mysql -h127.0.0.1 -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111),也正是PHPMYADMIN报错的内容。
典型的反其道而行之,哈哈。
本质是:机器的IP,Localhost,127.0.0.1,在/etc/hosts的指向,以及Mysql是否绑定端口。
Lost connection to MySQL server at ‘reading initial communication packet’, system error: 111
最近遇到一个比较少见的问题,php连接mySQL的时候,会报错
Lost connection to MySQL server at ‘reading initial communication packet’, system error: 111
这种现象还不是不断重复的,出现的频率不确定,疑似mySQL数据丢包。google之后,得到解决办法,通过修改my.cnf
1. 注释掉 # skip-networking
2. 给MYSQL绑定IP bind-address = 123.88.88.88 # server IP address
在Linux手册页中,每个命令或函数的名称后面可能会跟着一个数字,这个数字表示该命令或函数所在的手册部分。Linux手册页通常分为以下几个部分:
1. 用户命令(可执行程序或shell命令)
2. 系统调用(操作系统内核提供的函数)
3. 库调用(程序库中的函数)
4. 特殊文件(通常是/dev下的设备文件)
5. 文件格式和协议(如/etc/passwd等文件的格式)
6. 游戏和屏保
7. 杂项(如宏包、自定义约定等)
8. 系统管理命令和守护进程
因此,`mmap(2)` 中的 `2` 表示 `mmap` 是一个系统调用,具体来说,它是在手册的第2部分详细描述的系统调用。
问:如:man 3 epoll_create 是可以的吧?
答:不可以,`epoll_create` 属于系统调用,应在第2部分的手册中查找。
在Linux手册页中,每个数字代表一个手册部分。对于系统调用,应该使用第2部分,而不是第3部分。第3部分用于库函数调用。
因此,`man 2 epoll_create` 才是正确的命令,用于查看 `epoll_create` 系统调用的手册页。
======================================================================
怎么安装manpages啊?
试试
yum install man man-pages
1 用户命令, 可由任何人启动的。
2 系统调用, 即由内核提供的函数。
3 例程, 即库函数。
4 设备, 即/dev目录下的特殊文件。
5 文件格式描述, 例如/etc/passwd。
6 游戏, 不用解释啦!
7 杂项, 例如宏命令包、惯例等。
8 系统管理员工具, 只能由root启动。
9 其他(Linux特定的), 用来存放内核例行程序的文档。
n 新文档, 可能要移到更适合的领域。
o 老文档, 可能会在一段期限内保留。
l 本地文档, 与本特定系统有关的。
1. 用户命令(可执行程序或shell命令)
2. 系统调用(操作系统内核提供的函数)
3. 库调用(程序库中的函数)
4. 特殊文件(通常是/dev下的设备文件)
5. 文件格式和协议(如/etc/passwd等文件的格式)
6. 游戏和屏保
7. 杂项(如宏包、自定义约定等)
8. 系统管理命令和守护进程
因此,`mmap(2)` 中的 `2` 表示 `mmap` 是一个系统调用,具体来说,它是在手册的第2部分详细描述的系统调用。
问:如:man 3 epoll_create 是可以的吧?
答:不可以,`epoll_create` 属于系统调用,应在第2部分的手册中查找。
在Linux手册页中,每个数字代表一个手册部分。对于系统调用,应该使用第2部分,而不是第3部分。第3部分用于库函数调用。
因此,`man 2 epoll_create` 才是正确的命令,用于查看 `epoll_create` 系统调用的手册页。
======================================================================
怎么安装manpages啊?
试试
yum install man man-pages
1 用户命令, 可由任何人启动的。
2 系统调用, 即由内核提供的函数。
3 例程, 即库函数。
4 设备, 即/dev目录下的特殊文件。
5 文件格式描述, 例如/etc/passwd。
6 游戏, 不用解释啦!
7 杂项, 例如宏命令包、惯例等。
8 系统管理员工具, 只能由root启动。
9 其他(Linux特定的), 用来存放内核例行程序的文档。
n 新文档, 可能要移到更适合的领域。
o 老文档, 可能会在一段期限内保留。
l 本地文档, 与本特定系统有关的。
论语言:语言的决定权往往掌握在少数人的手里,平台制定者的手里,业界大佬的手里。而我们一帮民众就只能呼啦啦跟风,墙头草随风倒。需求到了哪里,语言就跟随到哪里。
论开放:Microsoft自己将一切包装的太好了,所以带来一些便利,但同时也给我带来了迷惑,当然我相信这份迷惑不是我独有的,每个学习这些东西的人都会有迷惑。还有一点,Microsoft就是大包大揽,什么都自己弄,虽说人多,但还是不利于技术的发展,而开源技术往往开发者众多,当然存在一些不稳定的因素,但还是广大人民群众的力量大。Windows最大的成功之处就是上面应用众多,这些应用谁开发的,99.9999%都不是Microsoft开发的,一个人的能力是有限的。所以Apple出了App Store收买开发者,这样人就多了,Google也出了Web Store。然而桌面应用在我国基本没钱赚,只能通过增值服务挣钱,想挣代码的钱那时绝对没有可能的,除非我国民对版权意识加强,然而我国倡导社会主义,最终要到共产主义的,就是大家有什么好东西就要共享,版权神马的都是浮云。飞信还因为.NET容易被反编译,又用C++开发了,大家觉得还是二进制安全。还有就是对于一些非主流的技术Microsoft团队维护能力有限导致bug丛生,又不开源用起来费劲,各种hack,别无它法。
最后,世界仍旧很美好,学习第二语言和其它框架具有重要性,有你好看。
阅读全文
论开放:Microsoft自己将一切包装的太好了,所以带来一些便利,但同时也给我带来了迷惑,当然我相信这份迷惑不是我独有的,每个学习这些东西的人都会有迷惑。还有一点,Microsoft就是大包大揽,什么都自己弄,虽说人多,但还是不利于技术的发展,而开源技术往往开发者众多,当然存在一些不稳定的因素,但还是广大人民群众的力量大。Windows最大的成功之处就是上面应用众多,这些应用谁开发的,99.9999%都不是Microsoft开发的,一个人的能力是有限的。所以Apple出了App Store收买开发者,这样人就多了,Google也出了Web Store。然而桌面应用在我国基本没钱赚,只能通过增值服务挣钱,想挣代码的钱那时绝对没有可能的,除非我国民对版权意识加强,然而我国倡导社会主义,最终要到共产主义的,就是大家有什么好东西就要共享,版权神马的都是浮云。飞信还因为.NET容易被反编译,又用C++开发了,大家觉得还是二进制安全。还有就是对于一些非主流的技术Microsoft团队维护能力有限导致bug丛生,又不开源用起来费劲,各种hack,别无它法。
最后,世界仍旧很美好,学习第二语言和其它框架具有重要性,有你好看。
阅读全文