本文叫做《squid常用操作命令》,其实这个叫法是不准确的。squid软件的最常用的两个命令是squid和squidclient ,而本文主要是介绍squid命令的用法。所以准确的说,本文称之为squid命令用法详解更恰当。之所以仍保留这个标题,是我想另外再增加常用关于日志查看的总结。

一、squid命令

平时常用的squid的常用操作有八个(该版本也是网上来回转载较多的):

1、初始化squid.conf 里配置的cache目录

1/App/squid/sbin/squid -z     //初始化缓存空间

如是想观察整个过程,请增加-X参数,即:squid -zX 。如果有错误提示,请检查你的 cache目录的权限。

2、对squid.conf排错,即验证squid.conf的语法和配置。

1/App/squid/sbin/squid -k parse

如果squid.conf 有语法或配置错误,这里会返回提示。如果没有返回,恭喜,可以尝试启动squid。

3、在前台启动squid,并输出启动过程。

1/App/squid/sbin/squid -N -d1

如果有到 ready to server reques,恭喜,启动成功。然后 ctrl + c,停止squid,并以后台运行的方式启动它。

4、启动squid在后台运行。

1/App/squid/sbin/squid -s

启动squid,并将日志记录到syslog进程。

5、停止 squid

1/App/squid/sbin/squid -k shutdown

最安全的停止squid的方法,另外还有 -k interrupt 与-k kill命令也用于关闭squid,其之间的区别会在squid的参数中讲到。

6、重引导修改过的 squid.conf

1/App/squid/sbin/squid -k reconfigure  //载入新的配置文件

这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。

7、轮循日志

1/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 添加如下行:

1/App/squid/sbin/squid -sD

注:当然我们也可以简单的使用squid所在的绝对路径启用squid,如/App/squid/sbin/squid

看完了常见的操作,再追根溯源的看下原生态的squid命令本身都提供了那些参数。如下:

 1[root@361way]$ squid -h
 2Usage: squid [-hvzCDFNRYX] [-d level] [-s | -l facility] [-f config-file] [-u port] [-k signal]
 3       -d level  Write debugging to stderr also.
 4       -f file   Use given config-file instead of /etc/squid/squid.conf
 5       -h        Print help message.
 6       -k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse
 7                 Parse configuration file, then send signal to
 8                 running copy (except -k parse) and exit.
 9       -s | -l facility
10                 Enable logging to syslog.
11       -u port   Specify ICP port number (default: 3130), disable with 0.
12       -v        Print version.
13       -z        Create swap directories
14       -C        Do not catch fatal signals.
15       -D        Disable initial DNS tests.
16       -F        Don't serve any requests until store is rebuilt.
17       -N        No daemon mode.
18       -R        Do not set REUSEADDR on port.
19       -S        Double-check swap during rebuild.
20       -X        Force full debugging.
21       -Y        Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.

具体每个参数的作用如下(以下部分参照彭勇华译的squid权威指南第五章,略作改动,加了一些自己的看法):

  • -a port 指定新的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权威指南》一书的第多少章。

二、常用日志分析语句

1cat /App/squid/var/logs/access.log | grep TCP_MEM_HIT

该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。

1cat /App/squid/var/logs/access.log | grep TCP_HIT

该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。

1cat /App/squid/var/logs/access.log | grep TCP_MISS

该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。关于 TCP_XXXX 等参数及代表的信息,请参看《squid中文权威指南》13.2.1 章节。

本文主要参考彭勇华中文译版squid权威南一书及原书Squid: The Definitive Guide