我正在编写一个Linux shell脚本,我需要在其中启动一个新的屏幕会话,在屏幕上运行node.js服务器,然后从屏幕上分离,以便我的服务器在后台运行。
现在,这些是我手动运行的命令:
screen
node server.js
[detach screen]
但是,我需要一种通过脚本自动执行此操作的方法,如果我只是在shell脚本中使用上述命令,它会创建屏幕并卡在那里。如何将“node server.js”命令传递给屏幕命令?
编辑:
基于建议的答案,我有一个可行的脚本,除了我需要手动创建一个屏幕并在运行之前从中分离。我尝试添加screen -d -m
作为创建分离屏幕的第一行,但脚本在该行之后挂起。
tempfile=$(mktemp)
indices=`tail -1 debug.log`
cat > $tempfile <<EOF
node server $indices
EOF
screen -X readbuf $tempfile
screen -X paste .
rm -f $tempfile
如何使用脚本创建和分离屏幕?
这也不起作用: 屏幕 屏幕-d
答案 0 :(得分:1)
这很简单:
screen -md node server.js
这需要命令作为服务运行(就像它一样),否则屏幕会立即停止。
还可以选择设置会话名称(例如“会话名称”):
screen -mdS session-name node server.js
然后,您可以通过以下方式附加到屏幕:
screen -rd session-name
如果要将所有输出重定向到文件,可以这样做:
screen -mdS session-name bash -c 'node server.js &> output.log'
然后,您可以监视输出,例如:
tail -f output.log
您可以列出正在运行的屏幕:
screen -ls
要么
screen -list
启动一个侦听端口8000的Python3 Web服务器,该服务器以命名方式提供当前目录中的文件
分离屏幕:
screen -mdS my-web-server python3 -mhttp.server
或者,通过记录到文件:
screen -mdS my-web-server bash -c 'python3 -mhttp.server &> output.log'
对于Python 2.x,它看起来像这样:
screen -mdS my-web-server bash -c 'python -mSimpleHTTPServer &> output.log'
答案 1 :(得分:0)
编辑:试试这个:
tempfile=$(mktemp)
cat > $tempfile <<EOF
node server.js
EOF
screen -S SessionName -X readbuf $tempfile; screen -RdS SessionName
screen -X paste .
rm -f $tempfile
它应该创建临时文件,创建一个名为SessionName
的屏幕并运行命令,然后删除临时文件。如果有效,请告诉我。