我有一个 bash 脚本,我希望它作为守护进程运行,因为它检查某个条件会做一些工作并休眠一段时间,然后循环重复。
I demonize the script as : nohup myScript.sh &
如何为相同的脚本设置日志记录,因为它具有相同的 echo 命令来打印一些语句,以及如果我想稍后杀死它,如何确保我有脚本的 pid。
谁能建议我如何实现同样的目标
将以下行放在脚本的开头。它为以后保存pid:
echo $$ > myScript.pid
启动您的脚本捕获输出以进行日志记录(来自nohup 手册页示例):
nohup myScript.sh > myScript.log &
稍后通过以下方式杀死脚本:
kill -9 `cat myScript.pid`
简单的 myScript.sh 示例:
#!/bin/bash
echo $$ > myScript.pid
while :; do echo "Hello"; sleep 1; done
如果您查看Advanced Bash-Scripting Guide中的 I/O 重定向章节,您会发现可以通过在脚本顶部执行以下操作将所有输出重定向到文件:
exec 2>&1
exec 1>>out.log
第一行将 stderr 重定向到 stdout,第二行将 stdout 附加到 out.log。如果您这样做,那么您可以使用 echo 将特定消息写入日志文件,并且您没有静音的所有命令的输出也将写入日志文件。
Bash 有很多特殊变量,您可以在Special Shell Variables 参考卡中获得这些的概述。其中之一是$$
,它保存脚本 PID。要保存它,您可以执行以下操作:
echo $$ > ${0}.pid
这将创建一个文件名<file name of script>.pid
,其中包含脚本的 PID。