我正在编写一个Linux shell脚本,我需要在其中启动一个新的屏幕会话,在屏幕上运行node.js服务器,然后从屏幕上分离,以便我的服务器在后台运行。
现在,这些是我手动运行的命令:
screen
node server.js
[detach screen]
但是,我需要一种通过脚本自动执行此操作的方法,如果我只是在shell脚本中使用上述命令,它会创建屏幕并卡在那里。如何将“node server.js”命令传递给screen命令?
编辑:
根据建议的答案我有一个有效的脚本,除了我需要手动创建一个屏幕并在运行之前从中分离。我尝试添加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
它就像这样简单:
screen -md node server.js
这需要命令作为服务运行(就像它一样),否则屏幕会立即停止。
还可以选择设置会话的名称(例如“session-name”):
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
启动一个Python3 Web服务器,侦听端口8000,它在当前目录中提供文件,位于命名的分离屏幕中:
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'
编辑:试试这个:
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
的屏幕并运行命令,然后删除临时文件。如果有效,请告诉我。