使用Bash脚本中的日志记录
我有一个bash脚本,我需要从中编写日志.目前我使用下面的块
#log stop request { local now=$(date +"%a %b %d %Y %H:%M:%S") printf "batch stop request successful. n" printf " Time :: %sn" "$now" printf " PID of process :: %sn" ${PID[0]}" } >> "${mylogfile}" 其中mylogfile变量将具有日志文件的名称. 这种方法的问题在于,当运行2个或更多实例时,日志会与来自交错实例的写入混乱. 请注意我使用块认为它会导致日志一次写入文件,从而避免了问题. 我从Vivek Gite post看过logger命令.但问题是它没有写入我可以指定的文件,而是写入/ var / log / message. 任何帮助深表感谢. 感谢致敬 解决方法
POSIX(IEEE Std 1003.1-2001)未定义将数据发送到同一文件的并发
write()系统调用的行为,因此您可能会获得不同的结果,具体取决于您的平台.您可以尝试将所有printfs合并为一个希望这将起作用,但即使它确实存在,也无法保证它将来或不同的平台上.
您可以将消息发送到第三个进程,而不是使用并发控制和刷新来确保写入顺序,该进程将代表所有进程将日志消息顺序写入文件.实际上,这就是您引用的post中使用logger和syslog所做的事情. logger命令不会将消息发送到/ var / log / messages.它将日志消息发送到syslog,可以将其配置为将日志消息保存在您喜欢的任何位置.但是,更改此配置通常需要管理权限. 如果您不能或不想使用syslog,也可以使用netcat作为日志记录服务器.运行此命令将所有脚本中的所有传入日志消息多路复用到文件中(此作业应始终在后台运行,您也可以在screen中运行它): nc -luk localhost 9876 > shared_log_file & (端口9876只是一个例子)并以这种方式登录每个脚本: printf "Log messagen" > /dev/udp/localhost/9876 您也可以使用自定义UDP服务器而不是netcat(例如this one). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |