सवाल मैं एक हेडलेस सर्वर इंस्टॉल पर pygi वेबकिट का उपयोग कैसे कर सकता हूं?


मेरे पास स्क्रिप्ट का एक सेट है जो मेरे लैपटॉप पर काम करता है जो तब तक ठीक काम करता है जब तक कि मैं एक एक्स सत्र में बूट हो जाता हूं, लेकिन अगर मैं एक हेडलेस सर्वर इंस्टॉल पर चल रहा हूं तो मुझे जीटीके से महत्वपूर्ण विफलताओं का भार मिलता है। मुझे यकीन है कि समाधान xvfb का उपयोग करना है, लेकिन मुझे एक कामकाजी उदाहरण नहीं मिल रहा है।

सहायता की सराहना की।


1
2017-11-24 16:57


मूल




जवाब:


मैंने पीछा किया यह लेख इस साल की शुरुआत में सर्वर पर फ़ायरफ़ॉक्स-आधारित परीक्षण ढांचे को चलाने के लिए। Xvfb-stuff बहुत आसान है, हमें केवल एक्सेस नियंत्रण को बंद करना सुनिश्चित करना है ताकि एक्स को सभी अपरिपक्वता न हो। ऐसा कुछ आपको जाना चाहिए:

sudo apt-get install xvfb
sudo Xvfb :10 -ac
export DISPLAY=:10
# run your gubbins

हालांकि आपको ध्यान रखना चाहिए कि यह सब कुछ वास्तविक डेस्कटॉप सत्र प्रदान करने वाला नहीं है। यदि आप कभी भी उस स्थिति में आते हैं (जहां आपको वास्तविक डेस्कटॉप की आवश्यकता होती है) तो सर्वर के शीर्ष पर वर्चुअल मशीन में इसे अलग करने के लायक हो सकते हैं। थोड़ा कम अक्षम लेकिन मील अधिक पोर्टेबल।

इब्राहीम से संपादित करें:
मैं पद्धति का उपयोग करके घायल हो गया, लेकिन मैं इसे एक पायथन प्रबंधन कार्य में चाहता था। मेरे कार्यान्वयन ने एक ही काम किया, लेकिन यह इस तरह दिखता था:

from django.core.management.base import BaseCommand, CommandError
import subprocess, os
from multiprocessing import Process

def run():
    sub = Process(target=subprocess.call, args=(('Xvfb', ':10', '-ac',), ))
    sub.start()
    env = os.environ.copy()
    env['DISPLAY'] = ":10"
    tasks = ('random','management','commands','thatneedDISPLAY:X')
    for task in tasks:
        p = subprocess.call(['python','manage.py',task],env=env)
    sub.terminate()

class Command(BaseCommand):
    def __init__(self):
        BaseCommand.__init__(self)

    args = 'none'
    help = '''Run all daily tasks.'''

    def handle(self, *args, **options):
        run()

2
2017-11-24 17:56



धन्यवाद @ ओली। आप एक lifesaver हैं। यह देखने के लिए कि क्या यह मेरे env में काम करता है, इसे स्वीकार करने से पहले मुझे इसे आज़माएं। - RobotHumans
इसके अलावा, अगर आपको केवल एक स्क्रिप्ट चलाने की आवश्यकता है, xvfb-run -a script मैन्युअल रूप से DISPLAY निर्दिष्ट किए बिना, सत्र में स्क्रिप्ट चलाएगा, या उम्मीद है कि आप उस व्यक्ति को चुनते हैं जो मौजूदा डिस्प्ले के साथ संघर्ष नहीं करता है (यदि आपको xvfb के तहत कई चीजें चलाने की आवश्यकता है)। - dobey
मैं django प्रबंधन कमांड को सबहेल प्राप्ति के साथ चला रहा हूं, इसलिए यह बिल्कुल सरल नहीं है। मैं आयात पायथन-जानवर-मोड-एक्सवीएफबी आयात करने की उम्मीद कर रहा था; पायथन-जानवर-मोड-xvfb.instance (वेबकिट उदाहरण) या कुछ, लेकिन यह ठीक है। - RobotHumans
@ hbdgaf कैसे? समाप्ति वंश की प्रक्रियाओं को मार नहीं देती है, इसलिए यह हो सकता है कि एक्स बाहर निकल रहा है और अनाथ (लेकिन जीवित) है। docs.python.org/dev/library/... - Oli♦
कोई बात नहीं। इसने काम कर दिया। मैंने कुछ समस्या निवारण के लिए रन रन रन किया। जब आप नग्न हो जाते हैं और इसे चलाने के दौरान xvfb काम चलाते हैं। - RobotHumans