如何从 Ubuntu 中的启动终端执行脚本正确启动脚本?

如何从 Ubuntu 中的启动终端执行脚本正确启动脚本?

假设您的面板中有一个启动程序,它以终端模式启动一个名为 foo.sh 的脚本。

foo.sh 在后台启动另一个名为 bar.sh 的脚本。

我遇到了问题:

第一:和bar.sh写入的文件名称不一样。

第二点也是最主要的:bar.sh 脚本不是独立的,当终端关闭时就会死亡。

我在一台旧的 16.04 机器上测试了这一点。

foo.sh

#!/bin/bash

#read an user input
read -r -t 60 -p ":" foo
echo "$foo"

#call bar script
/home/$USER/bar.sh "10" "$foo" & disown

#show if bar.sh was started
echo $?

#sleep a short time to see the echo's
sleep 3

酒吧

#!/bin/bash

#sleep some time
[[ -n "$1" ]] && sleep $1

#then write user input to file called output
echo "$2 - sleept $1 seconds" >> /home/$USER/output

如果 foo 中的休眠时间比 bar 中的长,则写入输出文件但名为 output?(末尾带有?)。

但是如果 bar 中的时间较大,那么当 foo 完成并且终端关闭时,bar 就会被终止。

知道如何正确设置 bar.sh 的后台实例吗?

另一个保持打开的终端对我来说不是一个解决方案。

谢谢!

PS作为评论建议,我应该在这里提出我的问题。

答案1

既然您说它有效,我就会给出这个答案,并提供附加信息。

“nohup” 代表“No Hungup”。顾名思义,即使会话断开,它也会继续运行命令而不会挂断。它用于在远程服务器上运行需要很长时间才能完成的命令(备份数据库等)。

通常,脚本的日志(如果有)存储在 ~/nohup.out 文件中。但您可以选择捕获日志,方法是附加或用新内容替换旧内容的日志。“>”单个大于号将用新内容替换旧日志。“>>”双大于号将把日志附加到文件末尾。

我使用以下格式在 crontab 中运行相同的操作。在本例中,我将替换旧日志。/path/to/script_folder/script_name.sh > /path/to/script_folder/logs/script_name.log 2>&1

相关内容