为了查找偶尔出现的启动问题,我希望在日志文件中保留现在保留的 2 个以上的文件。例如,在 /var/log 中,我有 Xorg.0.log 和 Xorg.0.log.old,它们是由两次启动创建的,我需要跟踪例如最后 10 个日志文件。其他主日志文件(如 dmesg)也类似(现在是 dmesg 和 dmesg.0)。
答案1
以下脚本将复制已定义的日志文件 ( source
)(最多可定义一个数量max_number
,脚本现在最多为 99 个)到您可以设置的目录中(dest
)。日志文件将命名为“01logfilename”、02logfilename 等,最多可定义一个数量。
如果达到最大副本数,脚本将始终保留最后(定义)数量的日志,并在每次运行脚本时重命名文件。
您可以通过将脚本添加到启动应用程序(Dash > 启动应用程序)来运行该脚本。请注意,如果您在登录时运行它,则需要对目标具有足够的权限。
剧本
#!/usr/bin/python3
import os
import shutil
source = "/path/to/logfile"
dest = "/path/to/destination/to_keep_the_logs"
max_number = 10 # set number up to 99
files_indest = [i for i in sorted(os.listdir(dest)) if not i.endswith("~")]
sections = [(item[:3], item[3:]) for item in files_indest]
number_oflogs = len(files_indest)
def convert_figures(number):
if len(str(number)) < 2:
return "0"+str(number)
else:
return str(number)
def lognumbers():
return [convert_figures(number+1) for number in range(0, number_oflogs+1)]
lognumbers = lognumbers()
if number_oflogs >= max_number:
os.remove(dest+"/"+files_indest[0])
for index in range(1, number_oflogs):
shutil.move(dest+"/"+files_indest[index],
dest+"/"+lognumbers[index-1]+files_indest[index][2:])
shutil.copyfile(source, dest+"/"+lognumbers[-2]+source.split("/")[-1])
else:
shutil.copyfile(source, dest+"/"+lognumbers[-1]+source.split("/")[-1])
如何使用
- 复制脚本并粘贴到空文本文件中,并将其保存为 logscript.py
source
在(例如source = "/var/log/Xorg.0.log"
)之后设置源(日志)文件- 设置目标文件夹,用于保存日志文件,之后
dest
- 设置保留的最大日志文件数量
- 将以下命令添加到启动应用程序:
python3 /path/to/script/script.py
不用说,如果您想/需要在登录前运行脚本,您需要在另一个级别启动它。
答案2
Ubuntu 在 cron 任务中运行 logrotate,负责处理 /var/log。似乎他们针对桌面与服务器对其进行了配置(如果我没记错的话,服务器会保留所有内容的最后 8 条日志)。这是该文档的作者。 http://manpages.ubuntu.com/manpages/jaunty/man8/logrotate.8.html