Archive for 五月, 2010

随着05超女火起来之后,一帮有的没的人,都想往选秀节目上凑热闹了。

不管是被夸还是被骂,反正有收视率保证着呢,反正能露个脸,反正能在广大中国老百姓面前混个脸熟,反正有钞票可拿!何乐而不为呢?

这其中也不乏“翘楚”,比如高晓松。这位老师曾经有着“辉煌”的过往:

“一首《睡在我上铺的兄弟》又在多少毕业前的散伙儿饭上引得大家痛哭流涕,而且事后仍然感慨万分。对很多人来说,那时的心情是最真的,那时的泪水是最值得回忆与感动的。
高晓松一手打造的包括了老狼、叶蓓、阿朵等, 曾经为刘欢、那英、小柯、黄磊、朴树、零点乐队、李宇春、林依伦、黄绮珊等人写歌或者担任制作人。为曾轶可出资录制歌曲。”
不过或者我是80后,或者我年轻的时候太土,反正,对于高老师,我是没啥感觉,只知道他是个混音乐圈子的人。
但是,我我我我我还是很吃惊的!为什么高晓松同学能对曾轶可有这么大的好感呢???
以下简单摘录他对曾哥的言论:
“所有反对曾轶可的人,加在一起,这一生写出来的歌,还没有曾轶可两首歌有质量,更别说跟我比了。”
“曾轶可代表的是普通人的梦想,我想告诉大家,这样的人也可以创造出属于自己的生活,唱自己的人生是这个行业生存的前途,以及音乐的理想和目的,这是我挺她的一个重要原因。”
而更惊喜的发现了这么一段话:
“原来小柯就不被看好,高晓松就自己出钱给小柯做专辑,当时周围的人都反对,小柯成名了;后来当他要做朴树的时候,连小柯都出来反对,因为朴树不但跑调,其音乐也太复杂,加上他的抑郁性格,怎么能做艺人呢,当时只有宋柯支持他,朴树成名了;而老狼,现在上台还紧张,跑调跑得厉害。”
哈哈,笑死我了!正好还发现了以上大佬们的myspace空间,大家可以去看看热闹!
罗列如下:
高晓松: 又称高胖子 www.myspace.cn/gxs
曾轶可: www.myspace.cn/zengyike
老狼:    www.myspace.cn/laolang

今天运行hadoop的php脚本时,总是出现一个很奇怪的现象:

10/05/20 15:33:41 INFO streaming.StreamJob: map 100% reduce 100%
10/05/20 15:33:41 INFO streaming.StreamJob: To kill this job, run:
10/05/20 15:33:41 INFO streaming.StreamJob: /usr/local/hadoop-0.20.2/bin/../bin/hadoop job -Dmapred.job.tracker=tj1cschsvc0001:9001 -kill job_201004301826_0595
10/05/20 15:33:41 INFO streaming.StreamJob: Tracking URL: http://tj1cschsvc0001:50030/jobdetails.jsp?jobid=job_201004301826_0595
10/05/20 15:33:41 ERROR streaming.StreamJob: Job not Successful!
10/05/20 15:33:41 INFO streaming.StreamJob: killJob…
Streaming Job Failed!

mapreducer明明已经100%完成了,但是却报Job not Successful。
查看log,发现syslog中有如下错误:
2010-05-20 15:32:38,494 INFO org.apache.hadoop.streaming.PipeMapRed: R/W/S=1/0/0 in:NA [rec/s] out:NA [rec/s]
2010-05-20 15:32:38,495 INFO org.apache.hadoop.streaming.PipeMapRed: R/W/S=10/0/0 in:NA [rec/s] out:NA [rec/s]
2010-05-20 15:32:38,496 INFO org.apache.hadoop.streaming.PipeMapRed: R/W/S=100/0/0 in:NA [rec/s] out:NA [rec/s]
2010-05-20 15:32:38,508 INFO org.apache.hadoop.streaming.PipeMapRed: R/W/S=1000/0/0 in:NA [rec/s] out:NA [rec/s]
2010-05-20 15:32:38,558 INFO org.apache.hadoop.streaming.PipeMapRed: MROutputThread done
2010-05-20 15:32:38,558 INFO org.apache.hadoop.streaming.PipeMapRed: MRErrorThread done
2010-05-20 15:32:38,562 INFO org.apache.hadoop.streaming.PipeMapRed: mapRedFinished
2010-05-20 15:32:38,567 INFO org.apache.hadoop.streaming.PipeMapRed: mapRedFinished
2010-05-20 15:32:38,581 WARN org.apache.hadoop.mapred.TaskTracker: Error running child
java.io.IOException: subprocess still running
R/W/S=4851/0/0 in:NA [rec/s] out:NA [rec/s]
minRecWrittenToEnableSkip_=9223372036854775807 LOGNAME=null
HOST=null
USER=ms
HADOOP_USER=null
last Hadoop input: |null|
last tool output: |null|
Date: Thu May 20 15:32:38 CST 2010
Broken pipe
at org.apache.hadoop.streaming.PipeReducer.reduce(PipeReducer.java:131)
at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:463)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:411)
at org.apache.hadoop.mapred.Child.main(Child.java:170)
2010-05-20 15:32:38,586 INFO org.apache.hadoop.mapred.TaskRunner: Runnning cleanup for the task

而且并不是每个task都出错,运行几次之后,发现4个reducer进程中,只有一个出现这个问题。
首先排查了reducer脚本代码,各个服务器代码都一致。其实从task的重试也可以看到,它在两台不同的服务器都尝试过,而其中的一台上的其他task是执行成功的。
更改reducer代码,仅读取输入,然后echo出来,还是一样的现象。
初步判断不是reducer脚本的问题。那么会同输入相关吗?将reducer改为/bin/cat,发现4个part文件中,有一个开头有一个空行,而且其他的都没有。

猜测罪魁祸首有可能就是这个空行!删除它之后,再次执行mapreducer,成功!

但是原因是什么呢?使用我的recuder脚本时,有空行就出错;而使用cat作为reducer,就正常运行。那么还是因为reducer脚本对于空行的处理不足!但是奇怪的是,直接运行reducer脚本,以echo的几个空行作为输入,也没有错误啊!

ps:这个空行的原因是,想要清空某个文件,用了 echo > filename。以后还是直接rm吧!

对比下一些两个数据库常用的操作。分别使用自带的client程序。

MySQL命令行:

mysql -u 用户名 -h 主机地址 -P 端口号 数据库名 -p

PostgreSQL命令行:
psql -U 用户名 -h 主机地址 -p 端口号 数据库名

操作对比:
mysql                      psql

SHOW DATABASES;           \l
USE db-name;              \c db-name
SHOW TABLES;              \d
SHOW USERS;               \du
SHOW COLUMNS;             \d table-name
SHOW PROCESSLIST;         SELECT * FROM pg_stat_activity;
SELECT now()\G            \x 可以打开和关闭类似\G功能
SOURCE /path.sql          \i /path.sql
LOAD DATA INFILE ...      \copy ...
\h                        \?

zz from: http://chenxiaoyu.org/blog/archives/175

针对下面的第一张result表中的数据,想要找到sid对应的每个course的分数,每个sid一行。这就需要行转列了。

行转列数据图

首先建立测试的表和数据:

create table course (id int, name nvarchar(100))
create table result (id int, sid varchar(16), course nvarchar(100), score int)
insert into course values(1, N'语文')
insert into course values(2, N'数学')
insert into course values(3, N'英语')
insert into result values(1, 2005001, N'语文',      80)
insert into result values(2, 2005001, N'数学',      90)
insert into result values(3, 2005001, N'英语',      80)
insert into result values(4, 2005002, N'语文',      56)
insert into result values(5, 2005002, N'数学',      69)
insert into result values(6, 2005002, N'英语',      89)

运行行转列的sql句子:

declare @sql varchar(8000)
set @sql='select sid'
select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then score end),0)'
from course order by id
set @sql=@sql+' from result group by sid order by sid'
print @sql
exec(@sql)

打印的结果:

select sid,语文=isnull(sum(case course when '语文' then score end),0),数学=isnull(sum(case course when '数学' then score end),0),英语=isnull(sum(case course when '英语' then score end),0) from result group by sid order by sid

可以看出,上面的course表其实只是一个工具。

在mysql中,如果想监测当前运行的sql句子的性能,可以使用show process类的语句。sql server提供了图形化的窗口,可以更直观的看到。

首先,打开sql server套件的performance tools->sql server profiler。

然后,file->new trace新建 一个跟踪,选择 要连接的数据库,在events selection中,选择要跟踪的类型(比如存储过程、sql句子等)。如果想查看详细的columns,就勾选show all columns,选中所有的columns。

在column filter中,把applicationname的notlike的值给去掉(默认有一长串值);在databaseId的like中输入你想跟踪的数据库id(可以通过select db_id()得到);还可以根据loginname、reads等进行过滤。

然后点击run,就可以了!

另外,可以使用以下语句打开sql句子的统计信息,然后控制台运行sql句子之后,就可以在messages tab里看到结果了
set statistics io on

一个查询需要的CPU、IO资源越多,查询运行的速度就越慢,因此,描述查询性能调节任务的另一种方式是,应该以一种使用更少的CPU、IO资源的方式重写查询命令,如果能够以这样一种方式完成查询,查询的性能就会有所提高。
如果调节查询性能的目的是让它使用尽可能少的服务器资源,而不是查询运行的时间最短,那么就更容易测试你采取的措施是提高了查询的性能还是降低了查询的性能。尤其是在资源利用不断变化的服务器上更是如此。首先,需要搞清楚在对查询进行调节时,如何测试我们的服务器的资源使用情况。
在开始我们的例子前,先运行下面的这二条命令(不要在正在使用的服务器上执行),这二条命令将清除SQL Server的数据和过程缓冲区,这样能够使我们在每次执行查询时在同一个起点上,否则,每次执行查询得到的结果就不具有可比性了:DBCC DROPCLEANBUFFERS和DBCC FREEPROCCACHE
输入并运行下面的Transact-SQL命令:
SET STATISTICS IO ON
SET STATISTICS TIME ON
一旦上面的准备工作完成后,运行下面的查询:
SELECT * FROM [order details]
显示结果:
SQL Server parse and compile time: (SQL Server解析和编译时间:)
CPU time = 10 ms, elapsed time = 61 ms. ……(1)

SQL Server parse and compile time: (SQL Server解析和编译时间:)
CPU time = 0 ms, elapsed time = 0 ms. ……(2)

(所影响的行数为 2155 行) ……(3)

Table ‘Order Details’. Scan count 1, logical reads 10, physical reads 1, read-ahead reads 9.
(表:Order Details,扫描次数 1,逻辑读 10,物理读 1,提前读取 9) ……(4)

SQL Server Execution Times:
(SQL Server执行时间:)
CPU time = 30 ms, elapsed time = 387 ms. ……(5)
标志(1)表示SQL Server解析“ELECT * FROM [order details]”命令并将解析的结果放到SQL Server的过程缓冲区中供SQL Server使用所需要的CPU运行时间和总的时间。
标志(2)表示SQL Server从过程缓冲区中取出解析结果供执行的时间,大多数情况下这二个值都会是0,因为这个过程执行得相当地快。
标志(5)表示执行这次查询使用了多少CPU运行时间和运行查询使用了多少时间。CPU运行时间是对运行查询所需要的CPU资源的一种相对稳定的测量方法,与CPU的忙闲程度没有关系。但是,每次运行查询时这一数字也会有所不同,只是变化的范围没有总时间变化大。总时间是对查询执行所需要的时间(不计算阻塞或读数据的时间),由于服务器上的负载是在不断变化的,因此这一数据的变化范围有时会相当地大。(由于CPU占用时间是相对稳定的,因此可以使用这一数据作为衡量你的调节措施是提高了查询性能还是降低了查询的性能的一种方法。)
标志(4)是SET STATISTICS IO的效果
Scan Count:在查询中涉及到的表被访问的次数。在我们的例子中,其中的表只被访问了1次,由于查询中不包括连接命令,这一信息并不是十分有用,但如果查询中包含有一个或多个连接,则这一信息是十分有用的。(一 个循环外部的表的Scan Count值为1,但对于一个循环内的表而言,其值为循环的次数。可以想象得到,对于一个循环内的表而言,其Scan Count值越小,它所使用的资源越少,查询的性能也就越高。因此在调节一个带连接的查询的性能时,需要关注Scan Count的值,在进行调节时,注意观察它是增加还是减少了。)
Logical Reads: 这是SET STATISTICS IO或SET STATISTICS TIME命令提供的最有用的 数据。我们知道,SQL Server在可以对任何数据进行操作前,必须首先把数据读取到其数据缓冲区中。此外,我们也知道SQL Server何时会从数据缓冲区中读取数据,并把数据读取到大小为8K字节的页中。那么Logical Reads的意义是什么呢?Logical Reads是指SQL Server为得到查询中的结果而必须从数据缓冲区读取的页数。在执行查询时,SQL Server不会读取比实际需求多或少的数据,因此,当在相同的数据集上执行同一个查询,得到的Logical Reads的数字总是相同的。(SQL Server执行查询时的Logical Reads值每一次这个数值是不会变化的。因此,在进行查询性能的调节时,这是一个可以用来衡量你的调节措施是否成功的一个很好的标准。如果 Logical Reads值下降,就表明查询使用的服务器资源减少,查询的性能有所提高。如果Logical Reads值增加,则表示调节措施降低了查询的性能。在其他条件不变的情况下,一个查询使用的逻辑读越少,其效率就越高,查询的速度就越快。)
Physical Reads:物 理读,在执行真正的查询操作前,SQL Server必须从磁盘上向数据缓冲区中读取它所需要的数据。在SQL Server开始执行查询前,它要作的第一件事就是检查它所需要的数据是否在数据缓冲区中,如果在,就从中读取,如果不在,SQL Server必须首先将它需要的数据从磁盘上读到数据缓冲区中。我们可以想象得到,SQL Server在执行物理读时比执行逻辑读需要更多的服务器资源。因此,在理想情况下,我们应当尽量避免物理读操作。下面的这一部分听起来让人容易感到糊涂 了。在对查询的性能进行调节时,可以忽略物理读而只专注于逻辑读。你一定会纳闷儿,刚才不是还说物理读比逻辑读需要更多的服务器资源吗?情况确实是这样, SQL Server在执行查询时所需要的物理读次数不可能通过性能调节而减少的。减少物理读的次数是DBA的一项重要工作,但它涉及到整个服务器性能的调节,而 不仅仅是查询性能的调节。在进行查询性能调节时,我们不能控制数据缓冲区的大小或服务器的忙碌程度以及完成查询所需要的数据是在数据缓冲区中还是在磁盘 上,唯一我们能够控制的数据是得到查询结果所需要执行的逻辑读的次数。

因此,在查询性能的调节中,我们可以心安理得地不理会SET STATISTICS IO命令提供的Physical Read的值。(减少物理读次数、加快SQL Server运行速度的一种方式是确保服务器的物理内存足够多。)
Read-Ahead Reads: 与Physical Reads一样,这个值在查询性能调节中也没有什么用。Read-Ahead Reads表示SQL Server在执行预读机制时读取的物理页。为了优化其性能,SQL Server在认为它需要数据之前预先读取一部分数据,根据SQL Server对数据需求预测的准确程度,预读的数据页可能有用,也可能没用。

在本例中,Read-Ahead Reads的值为9,Physical Read的值为1,而Logical Reads的值为10,它们之间存在着简单的相加关系。那么我在服务器上执行查询时的过程是怎么样的呢?首先,SQL Server会开始检查完成查询所需要的数据是否在数据缓冲区中,它会很快地发现这些数据不在数据缓冲区中,并启动预读机制将它所需要的10个数据页中的 前9个读取到数据缓冲区。当SQL Server检查是否所需要的全部数据都已经在数据缓冲区时,会发现已经有9个数据页在数据缓冲区中,还有一个不在,它就会立即再次读取磁盘,将所需要的 页读到数据缓冲区。一旦所有的数据都在数据缓冲区后,SQL Server就可以处理查询了。

总结:在对查询的性能进行调节时用一些科学的标准来测量你的调节措施是否有效是十分重要的。问题是,SQL Servers的负载是动态变化的,使用查询总的运行时间来衡量你正在调节性能的查询的性能是提高了还是没有,并不是一个合理的方法。
更好的方法是比较多个数据,例如逻辑读的次数或者查询所使用的CPU时间。因此在对查询的性能进行调节时,需要首先使用SET STATISTICS IO和SET STATISTICS TIME命令向你提供一些必要的数据,以便确定你对查询性能进行调节的措施是否真正地得到了目的。
======================
1.测试前用二条命令清除SQL Server的数据和过程缓冲区,以保证测试条件相同:
DBCC DROPCLEANBUFFERS和DBCC FREEPROCCACHE
2.SET STATISTICS TIME:看cpu时间
3.SET STATISTICS IO:关注scan count(计数)——查询读取的表数量 logical read( 逻辑读)次数
======================

PS:经测试确认SqlServer 2005中对表的连接条件会自动进行优化,但为了养成良好的习惯和在其他数据库上开发的性能考虑,需继续保持大表连接字段放在左边的习惯。

经常的需求是,由其他地方获取到一个类的名称,需要生成该类的对象。
直接使用这样的语法是肯定行不通的:

$classname='Test';
$obj = new $classname();

可以给目标类定义一个static的方法生成该对象的实例,然后通过call_user_func或call_user_func_array调用该方法。当然,也可以通过工厂类等方法来实现。

class Test{
var $val;
function __construct(){
$this->val = 'test';
}
static function create(){
static $instance ;
if (!$instance){
$instance = new Test();
}
return $instance;
}
}
$className = 'Test';
$obj = call_user_func(array($className, 'create'));
var_dump($obj);

为了对网站进行搜索引擎优化,专业的SEO都会强烈建议将动态的网页转变成静态的网页,将网页静态化确实是一个很好的优化策略。目前网页优化策略中的静态网页分真静态网页和伪静态网页两种,关于伪静态网页和生成方法在这之前我们有探讨,今天网页教学网那个重点探讨SEO网站优化之生成真静态网页的利与弊。相对于Wordpress等程序的伪静态URL重写,Z-Blog的真静态更有优势,搜索引擎蜘蛛会喜欢能响应If-modified-Since header和正确返回304(文件未更新)的服务器,而只有html真静态文件能默认做到这一点,搜索引擎可以正确判断文件是否更新及更新时间,并且减少重复抓取的损耗。这点也可以加快客户端载入网页的速度,CSS和JS等文件通常只需传送一次即可。访问多个网页时可有效提高用户体验。

1、访问速度相对比动态网页快。

在数据量相当的情况下,静态网页的下载速度要比动态网页快。这无论对于用户还是搜索引擎机器人都是非常友好的表现。特别是你的站点流量非常大,数据量也非常大,这时网页的下载速度对于你的网站来说是非常重要的。

2、网页的可控制性增强,网页的相似度降低。

在将网页静态化的过程中,一般会设计这样的功能。就是可以手动输入要生成静态网页的名称。这对于搜索优化比较有益处。比如笔者做WebCEO下载时,选取的文件名为:webceo-download。在Google中搜索“webceo 下载”时排名第三。你可以去看去观察一下,在搜索结果中的前三位,都在URL中出现了WebCEO,并且Google也把它加粗了。可见Google还是要考虑这一点的。而动态网页在未经过处理的情况下,它的文件名一般会是这样”Download.aspx?ID=123″。这样的文件名肯定就没有前面的文件名好了。

同样,对于Title、Keyword和Description等HTML标签,我们同样可以做成可手动控制的。通过增加这些网页元素的可控制性,我们可以降低网页的相似性,搜索引擎也会收录更多的网页。将网页静态化确实具有一定的优势,但经过实践,笔者也发现并不是说将网页静态化就是百分之百的好事。不过笔者在这里也想提醒您,是否要实施网页静态化得视具体的环境而定。如果应用不恰当,不但达不到优化的效果,还有可能给您带来很大的麻烦。

1、生成静态网页会增加服务器空间的负担。

有人是这样估算的:一篇文章的内容大概会占5K-10K,而其他的代码会占2/5-4/5,一个文件大概会增加15K左右,对于30万的文章数据库来说,需要增加了3.6G的硬盘空间使用。虽然现在的硬盘容量越来越大,但当网站的数据量达到一定的程度后,就得考虑这方面的因素了。

2、大量的静态网页增加维护的工作量。

网站的更新改版是免不了的事。你可以试想一个有一万个网页的网站(并不是特别多)要在每个网页增加一些内容,这将会是一件非常麻烦的事情。当然你也许会说我程序写好一点,更新就会很方便。笔者承认编写优质高效的程序可以减少这样的工作量。但是没法彻底解决大量文件带来的麻烦。

比如,很多静态化的网站都会有一个批量更新的功能。也就是批量生成静态网页。其实,这样的功能设计是很好的,但是在实际的使用中会出现一些问题。笔者遇到的最大问题是由于各种软硬件原因,在数以万计的网页文件中,总是有极少数文件没有生成成功,更糟糕的是有些没生成成功的文件无法被记录下来。这就好比一颗“定时炸弹”,它总有一天会“爆炸”。它始终是会被用户或蜘蛛找到,然后发现:咦,这个网页是咋回事呀?不对呀!

3、生成的静态网页消耗服务器资源。

有很多开发者将生成的静态网页的功能是用线程完成的。当文件数量大时,这会很耗服务器资源。

4、静态网页要读取动态数据。

你可能已经发现很多生成的静态网页是可以读取到系统的最新动态的。比如系统最新的想新闻。这其实就是一个静态网页要实现动态读取数据的功能。这在技术上是可以实现的,并且实现的方法很多。但在你设计网站的时候,就得考虑到这点。

可见,将网页静态化或者动态化都有一定的优势和不足。现在有一种做法就是将静态网页伪静态化。采用的是URL Rewrite,就是将动态的URL重写,形成静态页的表象。这也算是可以这两种方式的优势互补吧。

zz from: http://www.enet.com.cn/article/2010/0329/A20100329631969.shtml

在使用mysql的时候,这样的sql句子是很常用的:

insert into rec_top_users(objectid, type, orderData) values(1,1,1), (2,1,2)

但是放到sql server上却有可能出问题。
1、sql server 2008 : 正常使用以上的sql句子,没问题
2、sql server 2005 或之下的版本: 使用上面的句子时,会报语法错误:
Incorrect syntax near ‘,’.

原因是2005不支持这种写法!!

需要更改为:

insert into rec_top_users(objectid, type, orderData)
select 1, 1, 1
union all
select 2, 1, 2

Site指令,往往是很多SEO在查询网站收录数量时经常运用到的。其实Site的作用不仅仅体现在查询网站收录数量。它同时还具备很多的作用,例如网页优化时,选择哪个网页进行排名。以及整站优化时如何使用Site指令查看网站结构缺陷。除了可以用在分析网站之外,它也可以用做更好更合理的选取长尾关键字,来增进搜索引擎营销效果。掌握好Site指令的用法,也可以说是学习网络营销中的一个重要的过程。下面是Zeaer罗列出Site指令的运用技巧。

在SEO搜索引擎优化中,Site的重要用途
1) 可以用做查询网站搜索引擎收录数量。
其实这个方法大多数有互联网工作经验的人士都是知道的,就是利用site:wlyx.org(网站域名),通过针对的搜索引擎搜索,就可以轻松的查询出网站在该搜索引擎中的收录数量。当然,你也可以通过该指令来分析SEO竞争对手的网站情况。

2) 可以用来挑选好的反向链接
这个方法相对上面而言,经常运用的人就要少了很多。这其实也是一个搜索引擎的Bug,例如我要寻找的网站反向链接为公益性质的、并且与我网站相关的。我可以这样来寻找,在搜索引擎中输入指令“site:org 网络营销”,再或者输入指令“site:org.cn  营销”等等,当然如果是公司性质的站点可以输入指令“site:com.cn 营销”。利用这种方式所挑选出排在前面的大多是一些相对来说高质量的站点。

如果是需要发布博客链接的时候,挑选高权重域名下的资源博客,就更简单了。只要输入指令“site:gov.cn 博客”里面也有很多博客是允许注册以及添加链接的。这个主要是领用搜索引擎的Bug缺陷来实现的,往往很多SEO从业者都没有注意到。

3) 整站优化中也可Site指令用来分析网站的权重分布
以我的博客为例,我可以在Google搜索引擎中输入“site:wlyx.org”往往排在前面的都是权重相对较高的网页,一般情况下好的网站都是按照顺序排列的,例如一级页面,随后是二级页面…

4) 网页优化中可以更好更快的选出需要优化的网页
例如我要为一个网站做一个关键字,使他在百度排名前列。我可以通过百度搜索指令“site:域名 关键字”来判断出该站点目前最有排名优势的页面。

Site在搜索引擎营销中的作用
可以用来更好更直观的选择长尾关键字,来促进网站的网络销售效果。
例如我可以到一些论坛,或者天涯问吧,百度知道之类的问答网站,在当中寻找与行业相关的问题,当然一个个去找固然麻烦,我可以利用“site:zhidao.baidu.com 行业主要关键字”直接进行寻找,所出来的结果往往都是网友们需要解决的问题或者经常被搜索的相关长尾关键字。长尾关键字与搜索引擎营销有着密不可分的关系,因此只要掌握了这些方法,可以更好的促进企业的网络营销业绩。

由于时间的关系,仅罗列出一条,为读者提供参考。其实Site的用途还有很多,需要大家自己去思考,去发现。

2009年8月13日更正
原先文章中的site中S字母使用了大写,现已进行更正。注意使用site指令时,需要保证字母为小写。

本文出自:泽雅营销日志
原文链接:(http://wlyx.org/search-engine-optimization/basic-technology/site-instruction)

拒绝所有以Admin5为首的站长网转载 | 正规网站转载时请保留版权文字以及正规链接

在linux下,一般来说,想要自动定时运行命令,都会用到crontab。

它的语法也很简单明了:

10 1 * * * cd /path/to/script; sudo -u ms ./rec.sh >> rec.log 2>&1

10 */6 * * * cd /path/to/script; sudo -u ms ./rec.sh >> rec.log 2>&1

第一部分指定了执行的时间(分、小时、日、月、星期0-6),第二部分,指定了执行的命令。

上面第一个例子,是在凌晨1点10分,执行rec.sh命令,并输出log;第二个例子,是每隔6个小时执行一次命令,也就是0:10,6:10,12:10,18:10。

具体的编辑格式,请查看man 5 crontab (注意,不是man 1)

相关的命令:

crontab [-u user] file
crontab [-u user] [-l | -r | -e]

那么对于多用户的linux系统来说,怎样统一管理这些crontab呢?一个一个用户去查看,肯定太麻烦了。

猜想crontab应该是个编辑运行命令的客户端,那么它对应的服务器端是什么呢?查看man crontab可以看到其相关的命令式cron,再ps axu|grep cron,可以看到后台运行的cron进程。于是继续man cron,看到它会查看/var/spool/cron/crontabs  for  crontab  files!

这时,ls /var/spool/cron/crontabs,看到下面有几个以用户名命名的文件,里面就对应着各个用户的crontab内容了!这样就可以统一的管理多用户的crontab了!

有时,编辑了crontab,但是却不执行相应的命令,我遇到过两种不同的情况,会导致这个问题。

1、用户权限问题

If  the cron.allow file exists, then you must be listed therein in order to be allowed to use this command.  If

the cron.allow file does not exist but the cron.deny file does exist, then  you  must  not  be  listed  in  the

cron.deny  file  in  order  to use this command.  If neither of these files exists, only the super user will be

allowed to use this command.

也就是说,如果有cron.allow的话,仅其中列出的用户有执行crontab命令的权限;如果cron.allow不存在,而cron.deny存在的话,其中的用户没有执行权限;如果两者都没有,则仅root用户有执行权限。

2、cron daemon不读取crontab配置文件

这时,不管是crontab -e还是crontab filename貌似都没法使cron加载命令,那么只有kill掉cron进程,重启,然后就生效了!

查看是否成功执行crontab命令,一般可以通过搜索/var/log/message文件,例如:

tail -1000 /var/log/messages | grep rec.sh

如果有执行,但是没有达到想要的目的,那就要看看是否由于是环境配置的问题了!比如是否依赖.bash_profile等。