本文叫做《squid常用操作命令》,其实这个叫法是不准确的。squid软件的最常用的两个命令是squid和squidclient ,而本文主要是介绍squid命令的用法。所以准确的说,本文称之为squid命令用法详解更恰当。之所以仍保留这个标题,是我想另外再增加常用关于日志查看的总结。
一、squid命令
平时常用的squid的常用操作有八个(该版本也是网上来回转载较多的):
1、初始化squid.conf 里配置的cache目录
/App/squid/sbin/squid -z //初始化缓存空间
如是想观察整个过程,请增加-X参数,即:squid -zX 。如果有错误提示,请检查你的 cache目录的权限。
2、对squid.conf排错,即验证squid.conf的语法和配置。
/App/squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示。如果没有返回,恭喜,可以尝试启动squid。
3、在前台启动squid,并输出启动过程。
/App/squid/sbin/squid -N -d1
如果有到 ready to server reques,恭喜,启动成功。然后 ctrl + c,停止squid,并以后台运行的方式启动它。
4、启动squid在后台运行。
/App/squid/sbin/squid -s
启动squid,并将日志记录到syslog进程。
5、停止 squid
/App/squid/sbin/squid -k shutdown
最安全的停止squid的方法,另外还有 -k interrupt 与-k kill命令也用于关闭squid,其之间的区别会在squid的参数中讲到。
6、重引导修改过的 squid.conf
/App/squid/sbin/squid -k reconfigure //载入新的配置文件
这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。
7、轮循日志
/App/squid/sbin/squid -k rotate
每次执行squid -k rotate时,Squid轮循下列文件:cache.log, access.log, store.log, useragent.log (假如已激活), 以及referer.log (假如已激活)。
同时,Squid也会创建最新版本的swap.state文件。然而请注意,swap.state不会以数字扩展形式来轮转。
另外,要特别提示一下swap.state文件。当squid应用运行了一段时间以后,cache_dir对应的swap.state文件就会变得越来越大,里面的无效接口数据越来越多,这可能在一定程度上影响squid的响应时间,此时我们可以使用rotate命令来使squid清理swap.state里面的无效数据,减少swap.state的大小。
8、把squid添加到系统启动项
编辑 /etc/rc.d/rc.local 添加如下行:
/App/squid/sbin/squid -sD
注:当然我们也可以简单的使用squid所在的绝对路径启用squid,如/App/squid/sbin/squid 。
看完了常见的操作,再追根溯源的看下原生态的squid命令本身都提供了那些参数。如下:
[root@361way]$ squid -h Usage: squid [-hvzCDFNRYX] [-d level] [-s | -l facility] [-f config-file] [-u port] [-k signal] -d level Write debugging to stderr also. -f file Use given config-file instead of /etc/squid/squid.conf -h Print help message. -k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse Parse configuration file, then send signal to running copy (except -k parse) and exit. -s | -l facility Enable logging to syslog. -u port Specify ICP port number (default: 3130), disable with 0. -v Print version. -z Create swap directories -C Do not catch fatal signals. -D Disable initial DNS tests. -F Don't serve any requests until store is rebuilt. -N No daemon mode. -R Do not set REUSEADDR on port. -S Double-check swap during rebuild. -X Force full debugging. -Y Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.
具体每个参数的作用如下(以下部分参照彭勇华译的squid权威指南第五章,略作改动,加了一些自己的看法):
-a port<br />
指定新的http_port值。该选项覆盖了来自squid.conf的值。然而请注意,你能在squid.conf里指定多个值。-a选项仅仅覆盖配置文件里的第一个值。(该选项使用字母a是因为在Harvest cache里,HTTP端口被叫做ASCII端口)
-d level
让squid将它的调试信息写到标准错误(假如配置了,就是cache.log和syslog)。level参数指定了显示在标准错误里的消息的最大等级。在多数情况下,d1工作良好。请见16.2章关于调试等级的描述。
-f file
指定另一个配置文件。
-k function (平时用的较多的即-k参数)
squid 执行不同的管理功能。功能参数是下列之一:reconfigure,rotate,shutdown,interrupt,kill,debug,check,or parse。 + reconfigure 重新读取配置文件。 + rotate 滚动日志,这包括了关闭日志,重命名,和再次打开它们。 + shutdown 该命令发送TERM信号到运行中的squid进程。在接受到TERM信号后,squid关闭进来的套接字以拒收新请求。然后它等待一段时间,用以完成外出请求。默认时间是30秒,你可以在shutdown_lifetime指令里更改它。 + interrupt 立刻关闭squid,不必等待活动会话完成。这与在kill里发送INT信号相同。 + kill 发送KILL 信号给squid,这是关闭squid 的最后保证。 + debug 将squid 设置成完全的调试模式,假如你的cache 很忙,它能迅速的用完你的磁盘空间。 + check 简单的检查运行中的squid 进程,返回的值显示squid 是否在运行。 + parse 简单的解析squid.conf 文件,如果配置文件包含错误,进程返回非零值。
-s
激活将日志记录到syslog进程。squid使用LOCAL4 syslog设备。0级别调试信息以优先级LOG_WARNING被记录,1级别消息以LOG_NOTICE被记录。更高级的调试信息不会被发送到syslogd.你可以在/etc/syslogd.conf文件里使用如下接口:
local4.warning /var/log/squid.log
-u port
指定另一个ICP端口号,覆盖掉squid.conf文件里的icp_port。
-v
打印版本信息。
-z
初始化cache,或者交换,目录。在首次运行squid,或者增加新的cache目录时,你必须使用该选项。
-C
阻止安装某些信号句柄,它们捕获特定的致命信号例如SIGBUS和SIGSEGV。正常的,这些信号被squid捕获,以便它能干净的关闭。然而,捕获这些信号可能让以后调试问题困难。使用该选项,致命的信号导致它们的默认动作,通常是coredump。
-D
禁止初始化DNS测试。正常情况下,squid直到验证它的DNS可用才能启动。该选项阻止了这样的检测。你也能在squid.conf文件里改变或删除dns_testnames选项。
-F
让squid拒绝所有的请求,直到它重新建立起存储元数据。假如你的系统很忙,该选项可以减短重建存储元数据的时间。然而,如果你的cache很大,重建过程可能会花费很长的时间。
-N
阻止squid变成后台服务进程。
-R
阻止squid在绑定HTTP端口之前使用SO_REUSEADDR选项。
-V
激活虚拟主机加速模式。类似于squid.conf文件里的httpd_accel_host virtual指令。
-X
强迫完整调试模式,如你在squid.conf文件里指定debug_options ALL,9一样。
-Y
在重建存储元数据时,返回ICP_MISS_NOFETCH代替ICP_MISS.忙碌的父cache在重建时,该选项可以导致最少的负载。请见10.6.1.2章。
注:以上提到的第多少章,即《squid权威指南》一书的第多少章。
<br />
<strong>二、常用日志分析语句</strong>
cat /App/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。
cat /App/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。
cat /App/squid/var/logs/access.log | grep TCP_MISS
<br />
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。关于 TCP_XXXX 等参数及代表的信息,请参看《squid中文权威指南》13.2.1 章节。
本文主要参考彭勇华中文译版squid权威南一书及原书Squid: The Definitive Guide 。
<br />