あるサーバーから別のサーバーにサービスをデプロイ、開始、および停止するために必要なスクリプトを作成するには、サポートが必要です。サービスは属性ファイルを含む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を使用することはできません。サーバーへのルートアクセス権がありません。
ベストアンサー1
root
SystemDはプロセス(つまりシステムレベル)にのみ適用されません。 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