这一段时间又仔细看了一遍shell脚本高级教程,发现有很多新的收获。
调试shell程序用下面的命令,把执行的过程全部显示出来,很有用的命令:
sh -x -v example.sh
1. 使用Shell向Syslog日志文件写入信息
应用程序使用Syslog协议发送信息给Linux系统的日志文件(位于/var/log目录)。Sysklogd提供两个系统工具: 一个是系统日志记录, 另一个是内核信息捕获。通常大多程序都使用C语言或者Syslog应用程序或库来发送Syslog消息。
下面介绍如何使用sShell向Syslog日志文件写入信息:
(1). 使用Logger命令
Logger命令是一个Shell命令(接口)。你可以通过该接口使用Syslog的系统日志模块 你还可以从命令行直接向系统日志文件写入一行信息。
比如, 记录硬盘升级后的系统重启信息:
$ logger System rebooted for hard disk upgrade
然后你可以查看/var/log/message文件:
# tail -f /var/log/message
输出为:
Jan 26 20:53:31 dell6400 logger: System rebooted for hard disk upgrade
你也可以通过脚本程序来使用Logger命令。看下面的实例:
#!/bin/bash
HDBS="db1 db2 db3 db4"
BAK="/sout/email"
[ ! -d $BAK ] && mkdir -p $BAK || :
/bin/rm $BAK/*
NOW=$(date +"%d-%m-%Y")
ATTCH="/sout/backup.$NOW.tgz"
[ -f $ATTCH ] && /bin/rm $ATTCH || :
MTO="you@yourdomain.com"
for db in $HDBS
do
FILE="$BAK/$db.$NOW-$(date +"%T").gz"
mysqldump -u admin -p'password' $db | gzip -9> $FILE
done
tar -jcvf $ATTCH $BAK
mutt -s "DB $NOW" -a $ATTCH $MTO < DBS $(date)
EOF
[ "$?" != "0" ] && logger "$0 - MySQL Backup failed" || :
如果MySQL数据库备份失败, 上面最后一行代码将会写入一条信息到/var/log/message文件。
(2). 其它用法
如果你需要记录/var/log/myapp.log文件中的信息, 可以使用:
$ logger -f /var/log/myapp.log
把消息发送到屏幕(标准错误), 如系统日志:
$ logger -s "Hard disk full"
你可以参考man参考页获得更多的选项信息:
man logger
man syslogd
[root@cnc-squid2 ~]# man logger
LOGGER(1) BSD General Commands Manual LOGGER(1)
NAME
logger - a shell command interface to the syslog(3) system log module
SYNOPSIS
logger [-isd] [-f file] [-p pri] [-t tag] [-u socket] [message ...]
DESCRIPTION
Logger makes entries in the system log. It provides a shell command interface to the syslog(3) system log module.
Options:
-i Log the process id of the logger process with each line.
-s Log the message to standard error, as well as the system log.
-f file Log the specified file.
-p pri Enter the message with the specified priority. The priority may be specified numerically or as a ''facil-
ity.level'' pair. For example, ''-p local3.info'' logs the message(s) as informational level in the local3 facil-
ity. The default is ''user.notice.''
-t tag Mark every line in the log with the specified tag.
-u sock Write to socket as specified with socket instead of builtin syslog routines.
-d Use a datagram instead of a stream connection to this socket.
-- End the argument list. This is to allow the message to start with a hyphen (-).
message Write the message to log; if not specified, and the -f flag is not provided, standard input is logged.
The logger utility exits 0 on success, and >0 if an error occurs.
Valid facility names are: auth, authpriv (for security information of a sensitive nature), cron, daemon, ftp, kern, lpr,
mail, news, security (deprecated synonym for auth), syslog, user, uucp, and local0 to local7, inclusive.
Valid level names are): alert, crit, debug, emerg, err, error (deprecated synonym for err), info, notice, panic (deprecated
synonym for emerg), warning, warn (deprecated synonym for warning). For the priority order and intended purposes of these
levels, see syslog(3).
EXAMPLES
logger System rebooted