【问题标题】:Init.rc : service killed and restartsInit.rc : 服务被杀死并重新启动
【发布时间】:2023-12-15 00:25:02
【问题描述】:

我在 init.rc 中将 shell 脚本作为服务运行,但它被杀死并不断重启。

在init.rc中注册服务如下

service Storelog /system/bin/logwrapper /system/bin/store_log.sh
user root
disabled

脚本 store_log.sh 是

#!bin/sh
while true 
do
 echo "Updating system log.."
 logcat > /data/system.log &
 sleep 600 
 echo "Killing background logcat."
 logpid=$!
 echo "logpid $logpid"
 kill $logpid
 logcat -c

done

我正在启动这个 Storelog,比如 boot_completed

这个服务启动,在一个循环之后它被杀死并重新启动。

我在这里缺少什么?一些许可? 任何建议都有帮助。

【问题讨论】:

  • 你为什么用kill $logpid
  • 我不想让蜜蜂连续运行 logcat 后台进程,所以杀死该后台进程并在一段时间后重新启动

标签: android c shell init


【解决方案1】:

根据本页:http://developer.android.com/tools/help/logcat.html

'-c' 选项导致 logcat 退出

然而,到那时,'kill' 已经退出 logcat。

建议将脚本修改为:(未经测试)

#!bin/sh
while true 
do
 echo "Updating system log.."
 logcat -d > /data/system.log &
 sleep 600 
done

【讨论】:

  • 我想清除已经转储的 logcat,下次我想转储新的日志。所以我正在使用 logcat -c 。根据你提到的android开发者页面也说同样的。基本上它会清除所有的日志缓冲区,如主、系统等,并据我所知终止进程。
【解决方案2】:

你可以尝试给服务添加oneshot标签

service Storelog /system/bin/logwrapper /system/bin/store_log.sh

用户根

禁用

一击

【讨论】:

    最近更新 更多