我需要您的支持来创建一个部署、启动和停止从一台服务器到另一台服务器的服务所需的脚本。该服务是一个带有属性文件的 jar。
我会创建一个有更多选择的菜单脚本。
我是这样创建的:
#!/bin/bash
PS3='Please enter your choice: '
options=("Start" "Stop" "Deploy" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Start Shaw")
echo "you chose choice 1"
;;
"Stop Shaw")
echo "you chose choice 2"
;;
"Check Shaw Status")
echo "you chose choice 3"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done
我不知道如何将选择与各种功能联系起来。
启动功能:
我想到了这样一件事:
function start_service ( )
{
ssh $1 'nohup /data/jdk1.8.0_151/bin/java -jar -Xmx1024M /data/apps/file.jar &'
}
echo "Starting servers"
for serv_name in $( cat /data/server_list/list.txt )
do start_service ${serv_name} &
echo $! > pid.file &
sleep 5
done
其中 list.txt 是一个文件,其中包含需要启动此服务的所有服务器。问题是我需要在每台服务器上创建文件 pid.file ,并且通过从第一台服务器启动它,不会在第一台服务器上为列出的每台服务器创建进程,而是为每台服务器创建一个进程。
停止:
我需要从 pid.file 开始,读取 file.pid 并停止该进程的命令,例如:kill $(cat pid.file)
部署:
这就是问题所在。我想创建一个文件夹,将 jar 文件或属性文件放入其中,选择此功能,该文件将部署在定义路径中的所有服务器上: jar 文件:/pathtofile/apps/file.jar 文件属性: /pathtofile/conf/file.properties
PS:我不能使用 systemd 来解决安全问题,我没有服务器的 root 访问权限。
答案1
SystemD 不仅仅适用于root
进程(即系统级别)。您可以创建 SystemD 用户服务 ( systemctl --user ...
)。
#!/bin/bash
PS3='Please enter your choice: '
options=("Start" "Stop" "Deploy" "Quit")
select opt in "${options[@]}"; do
case $opt in
"Start")
echo "Starting servers"
for serv_name in $( cat /data/server_list/list.txt ); do
start_service "$serv_name" &
echo $! > "$serv_name".pid & # PID of the background subshell
sleep 5
done
;;
"Stop")
echo "you chose choice 2"
;;
"Deploy")
echo "you chose choice 3"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done