Webapp orqali ProcessBuilderni ishga tushirish haqida ba'zi savollar

Men asosan foydalanuvchilarga turli formalar orqali kiritilgan parametrlar bilan qobiq skriptlarini ochishga imkon beruvchi veb-ilovani yozyapman. Bir nechta tadqiqotlarni amalga oshirganimdan so'ng, ProcessBuilderni shell skriptlarini ishlatishning eng yaxshi usuli deb hisoblayman, biroq men kutib olishim kerak bo'lgan ba'zi shartlar bor va ba'zi bir kishilar menga to'g'ri chiziqlar bo'yicha fikr yuritmoqchimisizlar deb umid qilmoqdalar.

Boshlanadigan skriptlar ishlash uchun bir necha soat vaqt olishi mumkin. Shubhasiz, men ilovani to'xtatib turaman va uzoq kutaman. Xo'sh, mavzu bu savolga javob beradimi? Men iplarni ishlatish bilan ko'p tajribaga ega emasman va ba'zi maslahatlarni izlayapman. ProcessBuilderni yangi veb-ilovada ishga tushirishni boshlashim kerakmi? U ham ishlay oladimi? Yangi ish zarrachasini e'lon qilish va uni ishlab chiqaruvchini tayinlash kabi oddiymi? Ishlayotgan yoki yaratilgan turli mavzular haqida tashvishlanishim kerakmi? Nimaga e'tibor berish kerakligini yoki qanday tuzoqlardan xabardor bo'lishni amin bo'lmang.

Bundan tashqari, men hech bo'lmaganda, u ishlay boshlaganidan keyin jarayonning holatini tekshirishga imkon beradigan usulga muhtojman. Talablar, jarayonning qanchalik uzoqligini ko'rsatish uchun bir usulni talab qiladi, ammo buning imkoni yo'qligini bilmayman. Menimcha, hech bo'lmaganda, u hali ham ishlaydigan bo'lishi ma'qul bo'lishi kerak. Buni qanday aniqlash kerak?

Qo'shimcha ma'lumot olish uchun Java/Spring veb-ilovasi va Unix ning ba'zi lazzatlarida ishlaydi. Har qanday fikr va yordam uchun rahmat.

1

1 javoblar

Siz JobManager va Job kabi biror narsalarni amalga oshirishingiz mumkin.

Ish ProcessBuilder bo'lgan Runnable bo'lishi mumkin. Bu run usulida, jarayonni boshlaydi ( ProcessBuilder.start ), uni tugashini kutadi va tugallanganda JobManager ehtimol, jarayonning chiqish holatini qaytaradi.

JobManager , Jobs (har biri yangi Thread ) da tashkil qiladi, mavjud ishlarning to'plamini saqlaydi (va ehtimol yaqinda tugallangan ishlarning to'plami muvaffaqiyatsiz ishlarning ro'yxati). Iste'molchilar JobManager ishlarini barcha ishlarning yoki muayyan ishning holatini (ishlaydigan, tugagan, muvaffaqiyatsiz) bajarish va so'rov qilish uchun berishi mumkin.

Jarayonning holati bilan bog'liq holda, Ishning boshlanishi, tugash vaqti va exitStatus o'zgaruvchilari va ular bilan bog'liq bo'lgan usullari bo'lishi mumkin. Ish stantsiyani jadvalini ko'rsatish uchun ularni mijozga qaytarishingiz mumkin.

Sizning Job.run usuli shu kabi ko'rinishi mumkin.

public void run() {
  startTime = System.currentTimeMillis();  
  process = processBuilder.start();

 //spawn threads to consume process output streams
 //even if you're not going to read them

  while (running) {
    try {
      process.waitFor();
      running = false;
    } catch (InterruptedException e) {
     //you could stop a process by interrupting it's Job thread
      process.destroy();
    }
  }
  exitStatus = process.exitValue();
  endTime = System.currentTimeMillis();
  jobManager.onExit(this);
}

"% Complet" ga kelsak, bu sizning o'lchash usulingiz mavjud bo'lsa, bu faqatgina mumkin bo'ladi.

Muayyan vaqt ichida topshiriq bajarilishi kerak bo'lsa, uni kutilgan yakunlovchi vaqt/tugatish darajasi haqida xabar berishning qo'pol usuli sifatida foydalanishingiz mumkin.

Yoki, siz o'zingizning ishingizda %% to'ldirish uchun bu jarayonlardan foydalanib, jarayonlarning natijasini qo'lga kiritishingiz mumkin. Misol uchun, "X xabari" ni ko'rsangiz, percentComplete = 25% ni belgilang. Bu buyruq fayliga moslashtirilgan kodni amalga oshirishni nazarda tutishi mumkin - ehtimol, bir ish subclassi yoki Jobni chiqdi ajratish uchun mas'ul bo'lgan a'zolar o'zgarmaydiganini berish.

3
qo'shib qo'ydi
JobManager - men qo'rqayotganim. "Google java jarayonlarini boshqarish" yoki shunga o'xshash uchun foydali bo'ladi. Ehtimol, Apache Commons Exec [ commons.apache.org/exec/] yordam berishi mumkinmi? Men o'zim foydalanmaganman.
qo'shib qo'ydi muallif sudocode, manba
Juda aqlli g'oya, kirish uchun juda minnatdormiz. Men, albatta, mavzu ustida ko'p narsalarni o'qib chiqishga to'g'ri keladi va bunday ko'rinadi, lekin bu men istagan narsaga erishishning eng aqlli yo'li kabi ko'rinadi. JobManager-da, faqat bir ism bormi, yoki biror joyga qaraydigan haqiqiy sinfmi? Bu kabi narsalarning ayrim misollarini ko'rib chiqish uchun qaerga borishim mumkinligi haqida boshqa biron bir fikr bormi?
qo'shib qo'ydi muallif cardician, manba
Yana juda minnatdormiz. Men buni ko'rib chiqib, ko'proq o'qishni boshlayman va umid qilamanki, men ishlaydigan yechimni olaman. Sizning javobingiz, albatta, menga yaxshiroq e'tibor berishi kerak.
qo'shib qo'ydi muallif cardician, manba