Oll*_*lly 5 centos rhel5 memcached
我在 RHEL5.5 上运行 memcached 1.4.5。我使用 yum 安装了这个,它已经安装了标准的 memcached 脚本/etc/init.d
和配置文件/etc/sysconfig/memcached
:
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="256"
OPTIONS=""
Run Code Online (Sandbox Code Playgroud)
一切正常,但有一个例外 - 我不知道如何指定日志文件位置。我想放入日志文件,/var/log
但帮助或手册指定了如何执行此操作。
是否可以使用基本脚本来实现这一点?
小智 32
在末尾/etc/sysconfig/memcached
添加修改 OPTIONS 行">> /var/log/memcached 2>&1"
。IE
OPTIONS="-vv >> /var/log/memcached 2>&1"
Run Code Online (Sandbox Code Playgroud)
Cam*_*err 12
使用2>&1 >> logfile
的选项或初始化脚本是不明智的,因为当日志发生旋转时,当然假设你有地方放东西是要发生的日志文件将不会重新开放。这意味着你最终会得到轮换的日志文件(空,取决于轮换设置),你的实际日志数据将被写入一个实际上不存在目录条目的文件,这意味着它将在以下情况下被删除文件已关闭。为了在预期时关闭日志文件并因此安全地轮换,您必须重新启动 memcached(再见缓存!)。
相反,使用 logger(1) 命令之类的命令将日志记录到 syslog(使用特定工具,例如 local1,并让您的 syslog 规则适当地路由它(你好时间戳!),
OPTIONS=" 2>&1 | logger -i -p local1.info -t memcached"
Run Code Online (Sandbox Code Playgroud)
专门在 syslog 中路由消息的规则是可选的,但如果您使用的是 rsyslog,那么这将有所帮助:
local1.debug /var/log/memcached/memcached.log
Run Code Online (Sandbox Code Playgroud)
不要忘记 logrotate 规则,因为您正在使用 logger,所以您无需担心关闭任何日志文件,因为 syslog 会为您完成。
# cat /etc/logrotate.d/memcached
/var/log/memcached/memcached.log {
daily
rotate 3
dateext
missingok
create 0640 root root
compress
delaycompress
postrotate
#/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/syslogd.pid`
endscript
}
Run Code Online (Sandbox Code Playgroud)
对于 systemd 系统,它将负责收集 stderr 的输出并记录它,因此如果您只是包含-v
(仍然非常安静)或-vv
(过于冗长),那么您可以使用 journalctl 查询这些日志:
# journalctl --since '2012-01-01' _SYSTEMD_UNIT=memcached.service
-- Logs begin at Fri 2015-07-10 11:00:21 NZST, end at Mon 2015-08-03 23:36:49 NZST. --
Aug 03 23:36:49 HOSTNAME memcached[4318]: slab class 17: chunk size 3632 perslab 288
Aug 03 23:36:49 HOSTNAME memcached[4318]: slab class 18: chunk size 4544 perslab 230
...
Aug 03 23:36:49 HOSTNAME memcached[4318]: slab class 42: chunk size 1048576 perslab 1
Aug 03 23:36:49 HOSTNAME memcached[4318]: <26 server listening (auto-negotiate)
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 send buffer was 212992, now 268435456
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 server listening (udp)
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 server listening (udp)
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 server listening (udp)
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 server listening (udp)
Run Code Online (Sandbox Code Playgroud)
尽管您在 /var/log/ 下的任何地方都找不到这些日志;日志以二进制格式保存,因此您可以journalctl --output json ...
根据需要使用。有关更多信息,请参阅 /etc/systemd/journald.conf。
# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -vv"
# cat /usr/lib/systemd/system/memcached.service
[Unit]
Description=Memcached
Before=httpd.service
After=network.target
[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS
[Install]
WantedBy=multi-user.target
# cat /etc/systemd/system/memcached.service.d/local.conf
[Service]
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=memcached
SyslogFacility=local1
SyslogLevel=debug
SyslogLevelPrefix=false
# systemctl daemon-reload
# systemctl restart memcached.service
# systemctl status memcached
memcached.service - Memcached
Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled)
Drop-In: /etc/systemd/system/memcached.service.d
??local.conf <---------- NOTE
Active: active (running) since Tue 2015-08-04 01:07:50 NZST; 7s ago
Main PID: 3842 (memcached)
CGroup: /system.slice/memcached.service
??3842 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024 -l 127.0.0.1 -vv
...
// Note: rsyslogd uses its imjournal module to read logs from journald;
// make sure you have this configured if you've brought your rsyslog
// config from a previous version of RHEL
# echo "local1.debug /var/log/memcached/memcached.log" >> /etc/rsyslog.d/memcached.conf
# mkdir /var/log/memcached
# systemctl restart rsyslog.service
# systemctl status rsyslog.service
// Don't forget log rotation
# cat /etc/logrotate.d/memcached
/var/log/memcached/memcached.log {
daily
rotate 3
dateext
missingok
create 0640 root root
compress
delaycompress
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
Run Code Online (Sandbox Code Playgroud)
小智 1
在上一篇文章中建议为 memcached 创建调试日志:
假设用户 nobody 对 /tmp 具有写权限,请尝试以下操作,注意 2 的位置:
如果用户没人可以写入 /var/log 那么我假设可以在上面的命令中用 /var/log 替换 /tmp 。
归档时间: |
|
查看次数: |
31396 次 |
最近记录: |