কিভাবে ব্যাচ ফাইল ব্যবহার করে জাভা অ্যাপ্লিকেশন চালাতে কমান্ডটি পাস করবেন


1

তিনি এটিকে কিছুটা প্রাথমিক ও সরল মনে হতে পারে তবে আমি এর আগে কখনও তা করি নি।

আমার কাছে এই মাইনক্রাফ্ট সার্ভার রয়েছে এবং এটি একটি ব্যাচ ফাইল যুক্ত বুদ্ধি দিয়ে শুরু করে:

java -Xms1012M -Xmx1012M -jar craftbukkit-1.5.1-R0.1.jar -o true
PAUSE

এখন আমি খুব সহজ একটি ব্যাচ তৈরি করতে চাই যা সার্ভারটি থামিয়ে দেয়। সেন্টিমিডিতে আমি কেবল স্টপ টাইপ করতে পারি এবং সার্ভারটি বন্ধ হয়ে যায়। চলমান জাভা অ্যাপ্লিকেশনটিতে আমি এই আদেশটি কীভাবে পাস করতে পারি।

কিছু ছদ্ম কোড:

java craftbukkit-1.5.1-R0.1.jar stop

আমার সত্যিই কোন ধারনা নেই। আমি ইন্টারনেট অনুসন্ধান করেছি তবে আমি কেবল একটি স্টার্ট.বাট তৈরির টিউটোরিয়াল খুঁজে পাই।

টিউটোরিয়াল সহ একটি লিঙ্কও আমাকে আনন্দিত করবে। এটি কেবল এমনটি ঘটে যা আমি কোনও ভাল টিউটোরিয়াল খুঁজে পাই না যা এটি কভার করে।

এখন আমি লিনাক্সের জন্য এই স্ক্রিপ্টটি পেয়েছি:

 #!/bin/bash

    # Made by Devils Child.
    ##############################################################
    DIRECTORY='/home/minecraft'
    SESSIONNAME='minecraftserverscreen'
    JARFILE='craftbukkit.jar'
    WORLDNAME='world'
    NETHERNAME='world_nether'
    SKYNAME='world_skylands'
    ENDNAME='world_the_end'
    ##############################################################

start()
{
    SCREENID=$(screen -ls | grep -w $SESSIONNAME | cut -f 2)
    if [ $SCREENID ]; then
        echo "Minecraft is already running."
    else
        echo "Starting Minecraft server..."
        screen -dmS $SESSIONNAME java -Xms768M -Xmx768M -jar $JARFILE nogui
    fi
}

stop()
{
    SCREENID=$(screen -ls | grep -w $SESSIONNAME | cut -f 2)
    if [ $SCREENID ]; then
        echo "Stopping Minecraft server..."
        screen -S $SESSIONNAME -p 0 -X stuff "`printf "stop\r"`"
        while screen -ls | grep $SESSIONNAME > /dev/null
        do
            sleep 0.1
        done
    else
        echo "Minecraft is not running."
    fi
}

restart()
{
    echo "Restarting Minecraft server..."
    stop > /dev/null && start > /dev/null
}

saveoff()
{
    screen -S $SESSIONNAME -p 0 -X eval 'stuff "say Starting backup..."\015'
    screen -S $SESSIONNAME -p 0 -X eval 'stuff "save-off"\015'
    screen -S $SESSIONNAME -p 0 -X eval 'stuff "save-all"\015'
    sync
}

saveon()
{
    screen -S $SESSIONNAME -p 0 -X eval 'stuff "save-on"\015'
    screen -S $SESSIONNAME -p 0 -X eval 'stuff "say Backup complete."\015'
}

backup()
{
    echo "Creating backup of '$WORLDNAME', '$NETHERNAME', '$SKYNAME' and '$ENDNAME'..."
    saveoff
    sleep 5
    mkdir -p backups
    tar cfv "backups/NEW.tar" $WORLDNAME $NETHERNAME $SKYNAME $ENDNAME > /dev/null
    mv "backups/NEW.tar" "backups/$(date +"%m-%d-%Y_%H.%M.%S").tar"
    saveon
}

restore()
{
    echo "Restoring '$WORLDNAME', '$NETHERNAME', '$SKYNAME' and '$ENDNAME'..."
    stop > /dev/null
    rm -r $WORLDNAME
    rm -r $NETHERNAME
    rm -r $SKYNAME
    rm -r $ENDNAME
    tar xfv "backups/$(ls backups -t | head -1 | grep ".tar")" > /dev/null
    start > /dev/null
}

cd $DIRECTORY

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        restart
    ;;
    backup)
        backup
    ;; 
    restore)
        restore
    ;;
    *)
        echo "Usage: ${0} {start|stop|restart|backup|restore}"
        exit 2
esac
exit 0

তবে আমার সার্ভারটি একটি উইন্ডোজএক্সপি মেশিন চালাচ্ছে তাই উইন্ডোজে উপরেরগুলি করার কোনও উপায় আছে? আমার কোন ধারণা নাই.

উত্তর:


1

আমি অটোহটকি দিয়ে এটি করার একটি উপায় খুঁজে পেয়েছি:

পদক্ষেপ 1: ডাউনলোড- > অটোহোটকি.এক্স

পদক্ষেপ 2: ইনস্টল-> অটোহোটকি.এক্স

পদক্ষেপ 3: এই স্ক্রিপ্টটি লিখুন এবং এটিকে কল করুন (স্টপ.আাহক):

SetTitleMatchMode, 2      ; mode 2 = title only needs to contain string to match
SetKeyDelay, 0            ; set key delay to minimal
#WinActivateForce         ; automatically use more forceful methods
IfWinExist, run-minecraft ; check if there is a cmd window with this title
{                         ; send the commands
    ControlSend, ,say Server will shutdown in 10 seconds, run-minecraft
    ControlSend, ,{enter}
    sleep, 9999
    ControlSend, ,stop, run-minecraft
    ControlSend, ,{Enter}, run-minecraft
    return
}

পদক্ষেপ 4: title run-minecraftআপনার start.bat সামনে রাখুন

পদক্ষেপ 5: বাম ক্লিক করুন (স্টপ.আাহক) এবং স্ক্রিপ সংকলন নির্বাচন করুন

পদক্ষেপ:: উইন্ডোজ টাস্ক-ম্যানেজারের সাথে অ্যাপ্লিকেশন চালান


0

আপনি যদি কেবল প্রক্রিয়াটি মারতে চান তবে আপনি আপনার ব্যাশ স্ক্রিপ্টে এরকম কিছু করতে পারেন:

ps -ef | grep java | awk '{print$2}' | xargs -i kill {}

আপনি আরও নির্দিষ্ট সনাক্তকারী দিয়ে 'জাভা' প্রতিস্থাপন করতে পারেন।

আপনি যদি প্রক্রিয়াটিকে আরও করুণভাবে থামাতে চান তবে আপনাকে সকেট শ্রোতার মতো কিছু বাস্তবায়ন করতে হবে। সেক্ষেত্রে আপনি কোনও বন্দরের উপর দিয়ে চলমান অ্যাপ্লিকেশনটিতে কোনও বার্তা প্রেরণের জন্য একটি সাধারণ ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করতে পারেন এবং এটিকে নিজেকে বন্ধ করে দেওয়ার কথা বলছেন। আরও তথ্যের জন্য এই টিউটোরিয়ালটি দেখুন


0

টাস্কিলের কৌশলটি করা উচিত, দেখুন http://technet.microsoft.com/en-us/library/bb491009.aspx । তবে আমি মনে করি যে জটিল অংশটি কোন জাভা প্রক্রিয়াটিকে হত্যা করতে হবে এবং আমার মনে হয় জেপিএস সাহায্য করতে পারে। আরো তথ্য এখানে http://yannickloriot.com/2012/08/kill-a-java-process-from-the-command-line-or-a-bat-file/#sthash.t36Ff6C8.dpbs


আমি আশঙ্কা করছি যে আমি কেবল প্রক্রিয়াটি মেরে ফেললে সার্ভারটি ক্ষতিগ্রস্থ হবে
বোটেনউউভার

আপনি যদি ইমেজটির নাম দিয়ে জাভা প্রক্রিয়া শুরু করেন তবে এটি কোনও সমস্যা হওয়া উচিত নয়। আপনি কেন মনে করেন যে সার্ভারটি ক্ষতিগ্রস্থ হবে?

কারণ এখন আমি শাটডাউনটি ব্যবহার করার taskkill /F /IM java.exeসময় সার্ভারটি একটি সন্দেহজনক স্টপ তৈরি করবে। বেশিরভাগ সময় এটি কেবল কিছু সংরক্ষিত পরিবর্তনের ফলস্বরূপ। আমি ঠিক তাই সার্ভারটি থামাতে চাই কেন তাই এটি সমস্ত কিছু সংরক্ষণ করে cm এটি সিএমডি গুইতে স্টপ কমান্ড ব্যবহারের মাধ্যমে সম্ভব যেখানে জাভা.এক্সই .jar চালাচ্ছে। সুতরাং ব্যাচ ফাইলের মাধ্যমে জাভা.এক্সই-তে এই আদেশটি ফরোয়ার্ড করার কোনও উপায় আছে?
botenvouwer

আমি কেবল দেখতে পাচ্ছি মাইনক্রাফ্ট কোডটি দিয়ে খনন শুরু করা এবং আপনি স্টপ কমান্ডটি টাইপ করার সময় কী চাওয়া হয় তা দেখুন এবং আপনি সার্ভারের বাইরের অংশটি প্রতিলিপি করতে পারেন কিনা তা দেখুন।

আমি এটা করব। সবেমাত্র গ্রহণের সাথে এটি কীভাবে করা যায় এবং সার্ভার ক্লাসের স্টপ পদ্ধতি জারি করে সার্ভারটি বন্ধ করার জন্য একটি ক্লাস তৈরি করে তা নির্ধারণ করে।
botenvouwer
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.