- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚将四 block Raspberry Pi 3 组合在一起作为专用的 BOINC 集群。我喜欢我所拥有的,但由于我的主要桌面环境是 Linux(Windows 具有良好的 GUI 和远程监控支持,但 Linux 等价物似乎已失效),因此监控进度有点麻烦。
无论如何,我把这个 bash 脚本放在一起来跟踪事情
#!/bin/bash
tasks=($(boinccmd --get_tasks | grep ')' | cut -d ')' -f1))
progress=($(boinccmd --get_tasks | grep fraction | awk '{ print $NF }'))
remaining=($(boinccmd --get_tasks | grep remaining | awk '{ print $NF }'))
tabs -4 &> /dev/null
echo "${tasks[-1]} task(s)"
for i in "${tasks[@]}"; do
if [ $(echo "${progress[((--i))]} > 0.000" | bc) -eq 1 ]; then
progress_as_percent=$(echo "scale=1; (${progress[((--i))]}*100)/1" | /usr/bin/bc)
remaining_as_hours=$(echo "scale=0; ${remaining[((--i))]}/3600" | /usr/bin/bc)
remaining_as_minutes=$(echo "scale=0; (${remaining[((--i))]}/60)-(${remaining_as_hours}*60)" | /usr/bin/bc)
echo -e "#$i"'\t'"${progress_as_percent}%"'\t'"${remaining_as_hours}:${remaining_as_minutes}"
fi
done
cpu_temp="$(sudo cat /sys/class/thermal/thermal_zone0/temp)"
cpu_temp=$(echo "scale=1; ${cpu_temp}/1000" | bc)
core0freq="$(sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq)"
core0freq=$(echo "scale=2; ${core0freq}/1000000" | bc)
core1freq="$(sudo cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq)"
core1freq=$(echo "scale=2; ${core1freq}/1000000" | bc)
core2freq="$(sudo cat /sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_cur_freq)"
core2freq=$(echo "scale=2; ${core2freq}/1000000" | bc)
core3freq="$(sudo cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_cur_freq)"
core3freq=$(echo "scale=2; ${core3freq}/1000000" | bc)
tabs -8 &> /dev/null
echo
echo "${core0freq}/${core1freq}/${core2freq}/${core3freq}GHz ${cpu_temp}'C"
输出看起来像这样:
12 task(s)
#1 33.3% 11:14
#3 29.2% 12:50
#6 31.4% 12:15
#10 31.6% 11:58
1.20/1.20/1.20/1.20GHz 46.6'C
我不知道 bc
与其他替代方案相比的效率,也不知道这个脚本实例化了多少 shell。显然,由于 RPi3 在每美元 FLOPS 方面是一台动力不足的机器,因此此构建主要不关心效率……但仍然如此!我想知道我可以做些什么来获得我想要的信息。跟踪工作负载并不是那么重要,但 CPU 温度和核心时钟很重要。
提前致谢。 =)
编辑:根据请求,boinccmd --get_tasks
看起来像这样:
pi@serverpi:~ $ boinccmd --get_tasks
======== Tasks ========
1) -----------
name: p2030.20151124.G196.37-01.56.N.b3s0g0.00000_1563_1
WU name: p2030.20151124.G196.37-01.56.N.b3s0g0.00000_1563
project URL: http://einstein.phys.uwm.edu/
report deadline: Sat Sep 17 01:19:42 2016
ready to report: no
got server ack: no
final CPU time: 28977.680000
state: downloaded
scheduler state: preempted
exit_status: 0
signal: 0
suspended via GUI: no
active_task_state: UNINITIALIZED
app version num: 142
checkpoint CPU time: 28917.330000
current CPU time: 28977.680000
fraction done: 0.502852
swap size: 127 MB
working set size: 125 MB
estimated CPU time remaining: 28691.772814
然后(就我而言)14 个独立的工作单位。
最佳答案
您似乎在开始时调用了三次 boinccmd
,然后为每个任务调用了三次 bc
。因此,对于 14 个任务,您将有 45 个进程,而您可以只调用一次 boinccmd
和一次 awk
并获得大致相同的结果。
我没有永远为你做这一切,但它可能看起来像这样简单:
boinccmd --get_tasks | awk -F '[):]' '
/^[0-9])/ {tasks++}
/fraction/ {pctdone=$2*100}
/remaining/ {hrs=int($2/3600)
mins=int(($2-(hrs*3600))/60)
printf "#%d\t%2.1f\t%d:%02d\n",tasks,pctdone,hrs,mins}
END{printf "%d task(s)\n",tasks}
'
输出
#1 50.3 7:58
#2 98.0 1:00
2 task(s)
我添加了更多逻辑并改进了编号,所以现在看起来像这样:
./boinccmd --get_tasks | awk -F '[):]' '
/^[0-9])/ { tasks++; thisTask=$1; p=1 }
/fraction/ { pctdone=$2*100; if(pctdone<0.001)p=0 }
/remaining/ && p { hrs=int($2/3600); mins=int(($2-(hrs*3600))/60)
printf "#%d\t%2.1f\t%d:%02d\n",thisTask,pctdone,hrs,mins}
END{printf "%d task(s)\n",tasks}'
关于linux - 更高效的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308556/
我有一个功能是转换 ADO Recordset 进入html: class function RecordsetToHtml(const rs: _Recordset): WideString; 该函
经过几天的研究和讨论,我想出了这种方法来收集访客的熵(你可以看到我的研究历史here) 当用户访问时,我运行此代码: $entropy=sha1(microtime().$pepper.$_SERVE
给定一个无序列表 List ,我需要查找是否存在 String与提供的字符串匹配。 所以,我循环 for (String k : keys) { if (Utils.keysM
我已经搜索过这个问题,但没有找到我正在寻找的答案。 基本上,我想将类构造函数包装在 try/except 子句中,以便它忽略构造函数内特定类型的错误(但无论如何都会记录并打印它们)。我发现做到这一点的
我有一组三个数字,我想将一组数字与另一组数字进行比较。即,第一组中的每个数字小于另一组中的至少一个数字。需要注意的是,第一组中的下一个数字必须小于第二组中的不同数字(即,{6,1,6} 对 {8,8,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
首先介绍一下背景: 我正在开发一个带有 EJB 模块和应用程序客户端模块的企业应用程序 (ear)。我还使用 hibernate JPA 来实现持久性,并使用 swingx 来实现 GUI。这些是唯一
我正在尝试在我的上网本上运行 Eclipse 以便能够为 Android 进行开发。 您可能已经猜到了,Eclipse 非常慢,并且不容易有效地开发。 我正在使用 Linux Ubuntu 并且我还有
for row, instrument in enumerate(instruments): for col, value in enumerate(instrument):
return not a and not b ^ 我如何以更好的格式表达它 最佳答案 DeMorgan's Law , 也许? return not (a or b) 我认为在这一点上已经足够简单了
我正在尝试让 Font Awesome 图标看起来更 slim https://jsfiddle.net/cliffeee/7L6ehw9r/1/ . 我尝试使用“-webkit-text-strok
假设我有一个名为 vals 的数据框,如下所示: id…………日期…………min_date…… .........最大日期 1…………2016/01/01…………2017/01/01…………2018/
是否有更 Pythonic 的方式来做到这一点?: if self.name2info[name]['prereqs'] is None: se
我有一个函数可以将一些文本打印到它接收到的 ostream&。如果 ostream 以终端为目标,我想让它适应终端宽度,否则默认为某个值。 我现在做的是: 从 ostream 中获取一个 ofstre
这个问题在这里已经有了答案: Should a retrieval method return 'null' or throw an exception when it can't produce
我有这个 bc = 'off' if c.page == 'blog': bc = 'on' print(bc) 有没有更 Pythonic(和/或更短)的方式在 Python 中编写? 最佳
输入:一个包含 50,000 行的 CSV;每行包含 910 列值 0/1。 输出:运行我的 CNN 的数据框。 我编写了一个逐行读取 CSV 的代码。对于每一行,我将数据分成两部分,称为神经元(90
据我所知,with block 会在您退出 block 后自动调用 close(),并且它通常用于确保不会忘记关闭一个文件。 好像没有技术上的区别 with open(file, 'r+') as f
我有一个使用 Entity Framework V6.1.1 的 MVC 5 网站。 Entity Framework DbContext 类和模型最初都在网站项目中。这个项目有 3 个 DbCont
我是编程新手,在尝试通过将 tableView 和关联 View 的创建移动到单独的类并将委托(delegate)和数据源从 VC 移动到单独的类来精简我的 ViewController 时遇到了一些
我是一名优秀的程序员,十分优秀!