我本质上是在尝试组合创建屏幕并运行命令而不附加另一个答案允许我以另一个用户身份运行脚本。我想
- 从服务器 1 到服务器 2 的 SSH 并运行脚本
- 让脚本做一些事情来为新用户做好准备
- 脚本完成后,启动一个运行 java 进程的屏幕,如果崩溃则重新启动它。
我已经记下了 1 和 2。当使用 shell 测试 3 时screen -d -m ./startServer.sh newUser 1
,效果很好。当我将其放入 bash 脚本中时
mkuser newuser
...otherthings...
screen -d -m ./startServer.sh newuser 1
它不想跑。
当我使用从节点调用它时产卵,它与节点应用程序位于同一进程中,并且 stdout 永远不会关闭,看起来它根本就从未进入屏幕。更糟糕的是,当我从 server1 关闭节点时,bash 进程仍然存在,top
我必须 sigkill 它。
这是startServer.sh
#!/bin/bash
newuser=$1
maxram="$2""G"
echo Maxram $maxram
echo Creating server for user.
sudo -u $newuser bash << EOF
cd ~
while true
do
cd server
java -Xms512M -Xmx$maxram -jar server.jar
cd ..
sleep 30
done
EOF
echo Out