Secara otomatis restart aplikasi ketika ditutup

10

Saya memiliki aplikasi server yang ingin saya jalankan setiap kali komputer berjalan dan biasanya ini yang terjadi, kecuali kadang-kadang saya menemukan itu telah ditutup dengan sendirinya.

Apakah ada kelelawar atau skrip yang bisa saya jalankan untuk memonitor aplikasi dan me-restart itu harus ditutup?

Sid
sumber
Jenis aplikasi apa, dan bagaimana biasanya memulai? Sebagai layanan, dalam registri sebagai perintah jalankan, atau dalam folder startup?
KCotreau
Perintah jalankan registri. dengan opsi '-mulai'.
Sid
Apa yang saat ini terjadi jika Anda menjalankan perintah itu lagi dengan aplikasi sudah berjalan?
KCotreau
tidak ada. Perintah mengakui bahwa aplikasi sudah berjalan.
Sid

Jawaban:

12

Ini tidak selalu berhasil (ini tergantung pada bagaimana program memuatnya sendiri), tetapi biasanya Anda dapat membuat file batch seperti ini:

@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

goto Start

Saya telah menggunakan Notepad sebagai contoh.

Garis

echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

hanya penundaan (10 detik) untuk memberikan pengguna kesempatan untuk membatalkan proses sebelum mulai lagi.

Garis

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

tidak diperlukan, tetapi akan mencatat setiap kali program ditutup ke file, jadi mungkin berguna untuk mendiagnosis masalah. ErrorLevel mungkin tidak memberi tahu Anda banyak, tetapi sebuah program seharusnya mengembalikan 0 jika ditutup secara normal, dan tidak Pesan -zero jika tidak

Catatan, Anda menyebutkan bahwa program Anda tidak melakukan apa-apa jika sudah berjalan. Itu biasanya berarti bahwa aplikasi dimulai, mendeteksi bahwa salinan lain sudah berjalan dan segera dimatikan. Jika itu masalahnya, dan program Anda berjalan sebelum Anda memulai file batch ini, maka batch akan berulang dan mencoba untuk memulai program Anda setiap sepuluh detik.

sgmoore
sumber
"maka batch akan berulang dan mencoba memulai program Anda setiap sepuluh detik." Apakah ini hal yang buruk?
posfan12
Terima kasih!! Sedikit copy & paste pada jam 12:52, dan saya bisa tidur tanpa (terlalu banyak) khawatir tentang apa yang akan saya temukan (atau tidak temukan) di pagi hari. Uh. di pagi hari setelah tidur.
Spike0xff
2

Berdasarkan jawaban Anda di atas, apa yang saya sarankan adalah Anda menempatkan perintah itu ke dalam file batch, kemudian mengatur file batch untuk dijalankan sebagai tugas yang dijadwalkan setiap menit. Hampir tidak ada overhead yang terkait dengan ini, dan itu memastikan bahwa proses Anda akan dinyatakan terlepas dari apakah Anda ada di sekitar untuk menyadari itu berhenti.

KCotreau
sumber
Ini menurut saya sebagai solusi yang agak canggung dan tidak efisien, meskipun cepat. Apakah mungkin ada cara yang lebih tepat untuk tujuan yang sama? Terima kasih atas bantuan Anda!!!
Sid
Sid, seperti yang saya katakan, biaya overhead SANGAT minimal, dan itu MUDAH untuk dilakukan. Jika Anda ingin mencari cara untuk kode sesuatu untuk memeriksa untuk melihat apakah itu berjalan, dan kemudian untuk memulai kembali, jangan ragu, tapi saya sudah melakukan ini sejak lama dengan hasil positif. Ini adalah metode umum yang digunakan ketika Anda memiliki aplikasi, biasanya di server, yang berhenti berjalan.
KCotreau
Sejauh ini metode termudah. Dan tidak ada overhead.
surfasb
2

Saya kira jawaban yang tepat untuk pertanyaan ini tergantung pada mengapa Anda ingin melakukannya. Apakah Anda mencoba menyelesaikan pematian yang tidak disengaja? Cegah penutupan "jahat" oleh pengguna mesin (mis. Karyawan yang menutup perangkat lunak pemantauan)? Mencegah serangan berbahaya yang serius dan terampil? Apakah Anda mencoba untuk menulis malware sendiri (dalam hal ini silakan berhenti ;-))?

Juga, seperti yang disebutkan oleh komentator lain, akan berbeda jika Anda menulis layanan Windows (misalnya)

Secara pribadi, saya mungkin akan mulai dengan menulis aplikasi kedua dan memulainya dengan cara yang sama. Mintalah kedua aplikasi memindai satu sama lain secara berkala dan mulai ulang jika perlu - pastikan Anda memberikan cara mudah agar aplikasi ditutup secara sah!

Yang mengatakan, dan memberikan komentar Anda "kadang-kadang saya akan menemukan itu telah menutup dengan sendirinya" Saya AKAN AKAN memulai dengan mencoba mencari tahu mengapa itu ditutup ...

Steve Mallam
sumber
Saya menggunakan komputer sebagai server media dan aplikasi yang menyinggung adalah mediaserver.exe. Tidak ada yang berbahaya tentang itu. Saya tidak dapat melihat skenario apa pun yang saya inginkan aplikasi ditutup, tetapi jika saya melakukannya, tidak ada alasan saya tidak bisa menghentikan skrip atau kelelawar terlebih dahulu. Juga, saya tidak mampu menulis perangkat lunak, tetapi saya akrab dengan file bat. yaitu saya seorang noob.
Sid
Permintaan maaf - yang akan membuat saya berpikir saya berada di grup "Programmer" dan bahwa Anda akan menulis sendiri aplikasi :-) Kikuk kedengarannya saya sarankan pendekatan "tugas terjadwal" yang dijelaskan oleh @KCotreau
Steve Mallam
2

Anda dapat menggunakan program yang disebut ReStartMe 2.0 [ Mirror ] untuk melakukan hal itu:

Pantau proses dan mulai ulang jika ditutup.

Saxtus
sumber
-1

ini jauh lebih baik! ini adalah beberapa kode yang telah saya gunakan untuk server permainan minetest yang harus disimpan pada file .bat

@echo off
rem This is a comment line
rem This one is a comment too
rem Following line ensures the working directory is searched in C:
C:
rem Join the correct directory, where the server stuff lies in:
cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\"
:love_spaghetti_code
bin\server.lnk --config minetest.conf ^
            --worldname "Land of Blockheads" ^
            --gameid minetest_game ^
            --port 30000 ^
            --logfile bin/debug.txt

echo Restarting server....
goto love_spaghetti_code

echo Done (this should never, ever, happen)
Game Rottweiler
sumber