سؤال

لقد قمت بتطوير تطبيق Qt يحتوي على خادم TCP ومثله. أحاول الآن إجراء حزم Ubuntu والسماح للتطبيق بالبدء تلقائيا عند بدء التشغيل.

يجب تشغيل التطبيق حتى لو تم تسجيل أي شخص، مما يعني أن الخفي قد بدأ عبر برنامج نصي في /etc/init.d/

حاولت ببساطة تشغيل التطبيق عند بدء تشغيل وإرسال إشارة قتل عند التوقف في البرنامج النصي INIT.D ولكن هذا يعني أن التطبيق يعمل في المقدمة ويحظر البرنامج النصي INTIP.

تشجيع مثل في سؤال آخر يبدو تقريبا للعمل، أحصل على "خطأ غير معروف" بعد محاولة بدء تشغيل خادم TCP. ومع ذلك، يجب أن يكون هناك سهلة للغاية لكتابة البرنامج النصي Init-Script الذي يقوم بتشغيل طلبي في الخلفية عند بدء التشغيل في توزيعات Linux المختلفة.

يمكن لأي شخص لي نقطة في الاتجاه الصحيح؟

باستخدام Ubuntu 9.10 مع QT 4.5

هل كانت مفيدة؟

المحلول

هل تطبيقك تطبيق واجهة المستخدم الرسومية أم يعمل بدون واجهة المستخدم الرسومية؟

لماذا لا تتعرض للتو في إطار البرنامج النصي الأول باستخدام &؟

نصائح أخرى

أفضل طريقة هي ربما للاستخدام qtservice. حيث يتم اعتبار عمل الشوك من أجلك.

ومع ذلك، إذا كنت ترغب في الاستمرار في بناء خاص بك، يجب عليك إما خلفية التطبيق أو تشغيله عبر الخفي هذا يأتي مع openrc. أو فائدة مماثلة للتوزيع الخاص بك.

أيضا، تأكد من الارتباط فقط بمكتبة Qtcore المشتركة. على الرغم من أن التطبيق قد يكون سطر الأوامر وعدم سحب واجهة المستخدم الرسومية أبدا، فإن هذا لا يعني أن X غير مطلوب من أجل تشغيل التطبيق. على سبيل المثال، مجموعة من اختبارات الوحدة:

$ ldd runTests  | grep Qt
libQtTest.so.4 => /usr/lib/qt4/libQtTest.so.4 (0x00007fd424de9000)
libQtXml.so.4 => /usr/lib/qt4/libQtXml.so.4 (0x00007fd424baa000)
libQtGui.so.4 => /usr/lib/qt4/libQtGui.so.4 (0x00007fd4240db000)
libQtCore.so.4 => /usr/lib/qt4/libQtCore.so.4 (0x00007fd422644000)

لأن QtGui موجودة، يتم أيضا إحضار جميع مكتبات X أيضا، على الرغم من ترشيحها من الإخراج أعلاه.

تحتاج إلى إضافة رابط رمزي إلى أي من أدلة RC ؟D تحت / إلخ اعتمادا على Runlevel الافتراضي. أو استخدم البرنامج النصي لتحديث Rc.D: أولا تحتاج إلى إنشاء برنامج نصي في /etc/init.d الذي ينفذ التطبيق؛ ثانيا، استخدم البرنامج النصي لتحديث Rc.D لإضافة الملفات المطلوبة للبدء.

يمكنك العثور على معلومات حول كيفية القيام بذلك عن طريق قراءة صفحة دليل التحديث Rc.D:

$man update-rc.d

أعتقد أن أبسط طريقة ليست لديها أي منطق الرأس في تطبيقك نفسه، بدلا من ذلك استخدام برنامج مساعد لبدء التطبيق في الخلفية وإدارة PID لذلك.

علي سبيل المثال، startproc..

يمكنك إلقاء نظرة على العديد من البرامج النصية الموجودة بالفعل في /etc/init.d للإلهام. من ما أراه هناك، ومعظم مظاهر Linux القياسية تعتمد على startproc للبدء، و killproc للتوقف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top