View a markdown version of this page

Jalankan proses daemon latar belakang dari lingkungan antrian - Awan Batas Waktu

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Jalankan proses daemon latar belakang dari lingkungan antrian

Dalam banyak kasus penggunaan rendering, memuat aplikasi dan data adegan dapat memakan waktu yang cukup lama. Jika pekerjaan memuat ulang mereka untuk setiap frame, itu akan menghabiskan sebagian besar waktunya di overhead. Seringkali mungkin untuk memuat aplikasi sekali sebagai proses daemon latar belakang, memintanya memuat data adegan, dan kemudian mengirimkannya perintah melalui komunikasi antar proses (IPC) untuk melakukan render.

Banyak integrasi open source Deadline Cloud menggunakan pola ini. Proyek Open Job Description menyediakan pustaka runtime adaptor dengan pola IPC yang andal pada semua sistem operasi yang didukung.

Untuk menunjukkan pola ini, ada bundel pekerjaan sampel mandiri yang menggunakan kode Python dan bash untuk mengimplementasikan daemon latar belakang dan IPC untuk tugas untuk berkomunikasi dengannya. Daemon diimplementasikan dalam Python, dan mendengarkan sinyal POSIX SIGUSR1 kapan harus memproses tugas. Detail tugas diteruskan ke daemon dalam file JSON tertentu, dan hasil menjalankan tugas dikembalikan sebagai file JSON lain.

Prasyarat

Lakukan langkah-langkah berikut untuk menjalankan bundel pekerjaan sampel dengan proses daemon dari repositori github sampel Deadline Cloud.

  1. Jika Anda tidak memiliki farm Deadline Cloud dengan antrian dan armada Linux terkait, ikuti pengalaman orientasi terpandu di konsol Deadline Cloud untuk membuatnya dengan pengaturan default.

  2. Jika Anda tidak memiliki monitor Deadline Cloud CLI dan Deadline Cloud di workstation Anda, ikuti langkah-langkah di Menyi apkan pengirim Deadline Cloud dari panduan pengguna.

  3. Gunakan git untuk mengkloning GitHub repositori sampel Dead line Cloud.

    git clone https://github.com/aws-deadline/deadline-cloud-samples.git Cloning into 'deadline-cloud-samples'... ... cd deadline-cloud-samples/job_bundles

Jalankan sampel daemon

  1. Gunakan Deadline Cloud CLI untuk mengirimkan job_env_daemon_process sampel.

    git clone https://github.com/aws-deadline/deadline-cloud-samples.git Cloning into 'deadline-cloud-samples'... ... cd deadline-cloud-samples/job_bundles
  2. Dalam aplikasi monitor Deadline Cloud, Anda akan melihat pekerjaan baru dan dapat memantau kemajuannya. Setelah Linux armada yang terkait dengan antrian memiliki pekerja yang tersedia untuk menjalankan tugas pekerjaan, armada selesai dalam waktu sekitar satu menit. Dengan salah satu tugas yang dipilih, pilih opsi Lihat log di menu kanan atas panel tugas.

    Di sebelah kanan ada dua tindakan sesi, Launch DaemonProcess dan T ask run. Penampil log di tengah jendela sesuai dengan tindakan sesi yang dipilih di sebelah kanan.

    Pilih opsi Lihat log untuk semua tugas. Garis waktu menunjukkan sisa tugas yang dijalankan sebagai bagian dari sesi, dan Shut down DaemonProcess tindakan yang keluar dari lingkungan.

Melihat log daemon

  1. Di bagian ini Anda menggunakan monitor Deadline Cloud untuk membandingkan tindakan sesi dengan di mana tindakan tersebut ditentukan dalam template pekerjaan. Ini berlanjut dari bagian sebelumnya.

    Buka fil job_env_daemon_process/template e.yaml di editor teks. Bandingkan tindakan sesi dengan tempat yang ditentukan dalam template pekerjaan.

  2. Pilih tindakan Launch DaemonProcess sesi di monitor Deadline Cloud. Anda akan melihat output log sebagai berikut.

    2024/07/17 16:27:20-07:00 2024/07/17 16:27:20-07:00 ============================================== 2024/07/17 16:27:20-07:00 --------- Entering Environment: DaemonProcess 2024/07/17 16:27:20-07:00 ============================================== 2024/07/17 16:27:20-07:00 ---------------------------------------------- 2024/07/17 16:27:20-07:00 Phase: Setup 2024/07/17 16:27:20-07:00 ---------------------------------------------- 2024/07/17 16:27:20-07:00 Writing embedded files for Environment to disk. 2024/07/17 16:27:20-07:00 Mapping: Env.File.Enter -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/enter-daemon-process-env.sh 2024/07/17 16:27:20-07:00 Mapping: Env.File.Exit -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/exit-daemon-process-env.sh 2024/07/17 16:27:20-07:00 Mapping: Env.File.DaemonScript -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-script.py 2024/07/17 16:27:20-07:00 Mapping: Env.File.DaemonHelperFunctions -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh 2024/07/17 16:27:20-07:00 Wrote: Enter -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/enter-daemon-process-env.sh 2024/07/17 16:27:20-07:00 Wrote: Exit -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/exit-daemon-process-env.sh 2024/07/17 16:27:20-07:00 Wrote: DaemonScript -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-script.py 2024/07/17 16:27:20-07:00 Wrote: DaemonHelperFunctions -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh 2024/07/17 16:27:20-07:00 ---------------------------------------------- 2024/07/17 16:27:20-07:00 Phase: Running action 2024/07/17 16:27:20-07:00 ---------------------------------------------- 2024/07/17 16:27:20-07:00 Running command sudo -u job-user -i setsid -w /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/tmp_u8slys3.sh 2024/07/17 16:27:20-07:00 Command started as pid: 2187 2024/07/17 16:27:20-07:00 Output: 2024/07/17 16:27:21-07:00 openjd_env: DAEMON_LOG=/sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/daemon.log 2024/07/17 16:27:21-07:00 openjd_env: DAEMON_PID=2223 2024/07/17 16:27:21-07:00 openjd_env: DAEMON_BASH_HELPER_SCRIPT=/sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh

    Baris berikut dari template pekerjaan menentukan tindakan ini.

    stepEnvironments: - name: DaemonProcess description: Runs a daemon process for the step's tasks to share. script: actions: onEnter: command: bash args: - "{{Env.File.Enter}}" onExit: command: bash args: - "{{Env.File.Exit}}" embeddedFiles: - name: Enter filename: enter-daemon-process-env.sh type: TEXT data: | #!/bin/env bash set -euo pipefail DAEMON_LOG='{{Session.WorkingDirectory}}/daemon.log' echo "openjd_env: DAEMON_LOG=$DAEMON_LOG" nohup python {{Env.File.DaemonScript}} > $DAEMON_LOG 2>&1 & echo "openjd_env: DAEMON_PID=$!" echo "openjd_env: DAEMON_BASH_HELPER_SCRIPT={{Env.File.DaemonHelperFunctions}}" echo 0 > 'daemon_log_cursor.txt' ...
  3. Pilih salah satu aksi Task run: N session di monitor Deadline Cloud. Anda akan melihat output log sebagai berikut.

    2024/07/17 16:27:22-07:00 2024/07/17 16:27:22-07:00 ============================================== 2024/07/17 16:27:22-07:00 --------- Running Task 2024/07/17 16:27:22-07:00 ============================================== 2024/07/17 16:27:22-07:00 Parameter values: 2024/07/17 16:27:22-07:00 Frame(INT) = 2 2024/07/17 16:27:22-07:00 ---------------------------------------------- 2024/07/17 16:27:22-07:00 Phase: Setup 2024/07/17 16:27:22-07:00 ---------------------------------------------- 2024/07/17 16:27:22-07:00 Writing embedded files for Task to disk. 2024/07/17 16:27:22-07:00 Mapping: Task.File.Run -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/run-task.sh 2024/07/17 16:27:22-07:00 Wrote: Run -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/run-task.sh 2024/07/17 16:27:22-07:00 ---------------------------------------------- 2024/07/17 16:27:22-07:00 Phase: Running action 2024/07/17 16:27:22-07:00 ---------------------------------------------- 2024/07/17 16:27:22-07:00 Running command sudo -u job-user -i setsid -w /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/tmpv4obfkhn.sh 2024/07/17 16:27:22-07:00 Command started as pid: 2301 2024/07/17 16:27:22-07:00 Output: 2024/07/17 16:27:23-07:00 Daemon PID is 2223 2024/07/17 16:27:23-07:00 Daemon log file is /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/daemon.log 2024/07/17 16:27:23-07:00 2024/07/17 16:27:23-07:00 === Previous output from daemon 2024/07/17 16:27:23-07:00 === 2024/07/17 16:27:23-07:00 2024/07/17 16:27:23-07:00 Sending command to daemon 2024/07/17 16:27:23-07:00 Received task result: 2024/07/17 16:27:23-07:00 { 2024/07/17 16:27:23-07:00 "result": "SUCCESS", 2024/07/17 16:27:23-07:00 "processedTaskCount": 1, 2024/07/17 16:27:23-07:00 "randomValue": 0.2578537967668988, 2024/07/17 16:27:23-07:00 "failureRate": 0.1 2024/07/17 16:27:23-07:00 } 2024/07/17 16:27:23-07:00 2024/07/17 16:27:23-07:00 === Daemon log from running the task 2024/07/17 16:27:23-07:00 Loading the task details file 2024/07/17 16:27:23-07:00 Received task details: 2024/07/17 16:27:23-07:00 { 2024/07/17 16:27:23-07:00 "pid": 2329, 2024/07/17 16:27:23-07:00 "frame": 2 2024/07/17 16:27:23-07:00 } 2024/07/17 16:27:23-07:00 Processing frame number 2 2024/07/17 16:27:23-07:00 Writing result 2024/07/17 16:27:23-07:00 Waiting until a USR1 signal is sent... 2024/07/17 16:27:23-07:00 === 2024/07/17 16:27:23-07:00 2024/07/17 16:27:23-07:00 ---------------------------------------------- 2024/07/17 16:27:23-07:00 Uploading output files to Job Attachments 2024/07/17 16:27:23-07:00 ----------------------------------------------

    Baris-baris berikut dari template pekerjaan adalah apa yang menentukan tindakan ini. ```langkah-langkah:

    steps: - name: EnvWithDaemonProcess parameterSpace: taskParameterDefinitions: - name: Frame type: INT range: "{{Param.Frames}}" stepEnvironments: ... script: actions: onRun: timeout: 60 command: bash args: - '{{Task.File.Run}}' embeddedFiles: - name: Run filename: run-task.sh type: TEXT data: | # This bash script sends a task to the background daemon process, # then waits for it to respond with the output result. set -euo pipefail source "$DAEMON_BASH_HELPER_SCRIPT" echo "Daemon PID is $DAEMON_PID" echo "Daemon log file is $DAEMON_LOG" print_daemon_log "Previous output from daemon" send_task_to_daemon "{\"pid\": $$, \"frame\": {{Task.Param.Frame}} }" wait_for_daemon_task_result echo Received task result: echo "$TASK_RESULT" | jq . print_daemon_log "Daemon log from running the task" hostRequirements: attributes: - name: attr.worker.os.family anyOf: - linux