假设您的面板中有一个启动器,它在终端模式下启动一个名为 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
酒吧.sh
#!/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 中的睡眠时间,则输出文件被写入但称为输出?(最后有一个?)。
但是如果 bar 中的时间较大,那么当 foo 完成并且终端关闭时 bar 将被杀死。
知道如何正确设置 bar.sh 的背景实例吗?
另一个保持打开状态的终端对我来说不是解决方案。
谢谢!
PS 作为评论建议,我应该在这里问我的问题。
既然你告诉它有效,我就给出这个答案,并附上更多信息。
“nohup”代表“不挂断”。顾名思义,即使会话断开,它也会继续运行命令而不会挂断。它用于在远程服务器上运行需要很长时间才能完成的命令(备份数据库等)。
通常,脚本的日志(如果有)存储在 ~/nohup.out 文件中。但是您可以选择捕获日志,方法是使用新内容附加或替换旧内容的日志。">" 单个大于号将用新日志替换旧日志。“>>”双大于号会将日志附加到文件末尾。
我正在使用以下格式在 crontab 中运行相同的内容。在这种情况下,我将替换旧日志。/path/to/script_folder/script_name.sh > /path/to/script_folder/logs/script_name.log 2>&1