加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用Bash脚本中的日志记录

发布时间:2020-12-15 21:14:50 所属栏目:安全 来源:网络整理
导读:我有一个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]}" } "${
我有一个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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读