gpt4 book ai didi

linux - 从 systemd 服务调用 "top"命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:21 27 4
gpt4 key购买 nike

我编写了一个 bash 脚本,可以将特定进程的日期、时间、CPU 和 MEM 使用情况输出到一个文件中。我制作了一个“topLogger.service”服务,该服务运行并将日期和时间输出到文件中,但输出文件中未显示最高输出(CPU 和 MEM)。

当我从 bash shell 运行 bash 脚本时,它工作得很好!

sudo ./topLoggerScript.sh 

我相信这条线可能是罪魁祸首,但我不确定如何解决这个问题。

/usr/bin/top -n 1 | grep service_to_monitor

这是整个脚本:

#!/bin/bash

cpu=10
mem=11
cur_date=$(date +"%Y-%m-%d")
echo "starting date is $cur_date"

# Create starting file if todays file does not exist
if [ ! -e /file/location/$cur_date.txt ] ; then
echo "DATE TIME CPU MEM" > /file/location/$cur_date.txt
fi

while true
do
STRING=$(/usr/bin/top -n 1 | grep service_to_monitor)
arr=($STRING)

next_date=$(date +"%Y-%m-%d")

if [ "$cur_date" != "$next_date" ];then
# Day changed. Create a new file using cur_date.
echo "DAY CHANGE"
echo "DATE TIME CPU MEM" > /file/location/$cur_date.txt

# And change prev_date to cur_date
cur_date=$next_date
fi

sudo echo $(date +"%Y-%m-%d %H-%M-%S") ${arr[cpu-1]} ${arr[mem-1]}>>/file/location/$cur_date.txt
sleep 5
done

这是我的服务文件的权限:

-rw-rw-r--  1 root root  121 Oct 25 15:54 topLogger.service

这里是 topLogger.service 文件本身:

    [Unit]
Description=Resource monitor for a specific process

[Service]
ExecStart=/path/to/script/logResourceUsage.sh

最佳答案

问题是 top -n 1 在打印输出后没有像 say echo 那样退出。您编写脚本的方式需要一个进程将这些值打印为纯文本,然后退出,以便将其通过管道传输到 greptop -l 1 -n 1 可能更理想,这将适本地打印和退出。

关于linux - 从 systemd 服务调用 "top"命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40251283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com