如何在定时执行的Bash脚本中添加系统时间至输出文件?
给进程采集脚本添加执行时间字段
你可以通过以下方式修改脚本,给每条进程数据加上当前脚本执行的系统时间字段:
1. 重新生成修改后的script.sh
用以下命令覆盖原有的script.sh,脚本会自动处理表头并给每行数据追加采集时间:
echo -e '#!/bin/bash COLLECT_TIME=$(date "+%Y-%m-%d %H:%M:%S") # 仅在文件为空时输出表头 if [ ! -s output.txt ]; then echo "COLLECT_TIME USER TIME COMMAND DRS RSS VSZ STARTED" >> output.txt fi # 跳过ps自带表头,给每行数据加采集时间 ps -eo user,cputimes,comm,drs,rss,vsz,lstart --sort -cputimes | tail -n +2 | awk -v time="$COLLECT_TIME" '\''{print time, $0}'\'' >> output.txt' > script.sh
2. 赋予脚本执行权限(可选)
如果不想每次用sh调用脚本,可以给脚本添加执行权限:
chmod +x script.sh
3. 保持原执行命令不变
继续用原来的命令启动定时采集,24小时后自动终止:
timeout 1440m watch -n900 sh script.sh
效果示例
修改后output.txt的内容会变成这样:
COLLECT_TIME USER TIME COMMAND DRS RSS VSZ STARTED 2024-05-20 14:30:00 hpnunes 4799 gnome-shell 5530046 180844 5530052 Fri Jul 29 18:05:00 2022 2024-05-20 14:30:00 hpnunes 3084 Xwayland 491848 97336 493408 Fri Jul 29 18:05:00 2022 2024-05-20 14:30:00 hpnunes 1770 Isolated Web Co 3040881 290648 3041488 Mon Aug 1 10:50:45 2022
关键说明
- 用
date "+%Y-%m-%d %H:%M:%S"生成标准化时间格式,你可以根据需求修改格式(比如换成date "+%s"生成时间戳) - 通过
if [ ! -s output.txt ]判断文件是否为空,避免每次采集重复输出表头 - 用
tail -n +2跳过ps自带的表头,再通过awk把采集时间追加到每行数据前,确保格式统一
内容的提问来源于stack exchange,提问作者HP-Nunes
相关产品推荐
相关产品推荐

