后台脚本放在哪里

后台脚本放在哪里

我有一个脚本,我想让它在后台持续运行,但我不知道从哪里启动它

如果我把它放进去.bashrc,它将运行多次(每次登录一次)

这是一个无限循环,我希望在用户登录的情况下运行,但每个用户不能运行多次。

答案1

您的脚本应该检查是否只有一个实例。尝试这样的事情:

#!/bin/bash

mkdir ~/.lock_script || exit
trap "rmdir ~/.lock_script" EXIT

while true
do
    # Do whatever the script does continuously, here....
    #
done

trap命令负责在退出时进行清理,因此即使脚本被终止或终止,它也会进行清理。没有进程可以捕获(捕获)TERM 信号(信号 9),因此如果您kill -9执行脚本,它不会自行清理。

就内核而言,mkdir 是一个原子操作。如果 mkdir 不成功(例如,如果目录已存在),则该命令将返回错误,这将导致命令的后半部分运行 - 例如退出。

您可以将该命令读作“mkdir or else exit” - 这里有更好的解释:http://initialprogramload.blogspot.com/2008/11/single-script-instance.html

我还建议您不要while true以这种方式使用 - 如果可能的话,尝试想出另一种方式来做您想做的事情。

答案2

bash(1)作为登录 shell 运行时(即,当用户登录时),它将运行/etc/profile~/.bash_profile~/.bash_login和 ,~/.profile除非使用 调用--no-profile。从那里开始你的脚本应该可以解决问题。

答案3

您可以再添加一项条件,如下所示:

加入.bashrc

export my_script_pid=myscript.${USER}
[[ ! -f $my_script_pid ]] && { touch $my_script_pid; echo run-script; } || echo "script already running"

然后在你的脚本中rm $my_script_pid最后添加。

答案4

您可以运行该脚本并可以从以下命令获取日志:

nohup /path/to/your/script.sh > /dev/null 2>&1 &

它还会给你输出。

相关内容