如何从 Ubuntu 中执行的启动器终端正确启动脚本?
How to start a script properly from a starter terminal executed script in 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
bar.sh
#!/bin/bash
#sleep some time
[[ -n "" ]] && sleep
#then write user input to file called output
echo " - sleept seconds" >> /home/$USER/output
如果 foo 的休眠时间比 bar 长
输出文件已写入但称为输出? (末尾有一个?)。
但是如果 bar 中的时间较长,那么当 foo 完成并且终端关闭时 bar 被终止。
知道如何正确设置 bar.sh 的后台实例吗?
另一个保持打开状态的终端对我来说不是解决方案。
谢谢!
此答案来自 Ask Ubuntu 上的学习者:
"nohup"代表"No Hungup"。顾名思义,它会继续执行 运行 命令而不会挂断,即使会话断开也是如此。它用于 运行 远程服务器上的命令,这些命令需要很长时间才能完成(备份数据库等)。
通常,脚本的日志(如果有的话)存储在 ~/nohup.out 文件中。但是您可以选择捕获日志,方法是使用新内容附加或替换旧内容的日志。 ">" 单个大于号将用新的替换旧的日志。 ">>" 双大于号会将日志附加到文件末尾。
我使用下面的格式在 crontab 中 运行 同样的事情。在这种情况下,我要替换旧日志。 /path/to/script_folder/script_name.sh > /path/to/script_folder/logs/script_name.log 2>&1
假设您的面板中有一个启动器,它在终端模式下启动一个名为 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
bar.sh
#!/bin/bash
#sleep some time
[[ -n "" ]] && sleep
#then write user input to file called output
echo " - sleept seconds" >> /home/$USER/output
如果 foo 的休眠时间比 bar 长 输出文件已写入但称为输出? (末尾有一个?)。
但是如果 bar 中的时间较长,那么当 foo 完成并且终端关闭时 bar 被终止。
知道如何正确设置 bar.sh 的后台实例吗? 另一个保持打开状态的终端对我来说不是解决方案。 谢谢!
此答案来自 Ask Ubuntu 上的学习者:
"nohup"代表"No Hungup"。顾名思义,它会继续执行 运行 命令而不会挂断,即使会话断开也是如此。它用于 运行 远程服务器上的命令,这些命令需要很长时间才能完成(备份数据库等)。
通常,脚本的日志(如果有的话)存储在 ~/nohup.out 文件中。但是您可以选择捕获日志,方法是使用新内容附加或替换旧内容的日志。 ">" 单个大于号将用新的替换旧的日志。 ">>" 双大于号会将日志附加到文件末尾。
我使用下面的格式在 crontab 中 运行 同样的事情。在这种情况下,我要替换旧日志。 /path/to/script_folder/script_name.sh > /path/to/script_folder/logs/script_name.log 2>&1