OffVPSVPS OFFSHOREDukungan

Otomatisasi kecil

Beri batas yang jelas pada tugas terjadwal kecil.

Tugas kecil yang andal memiliki penyelesaian yang jelas, catatan hasilnya, dan aturan untuk eksekusi kedua yang datang terlalu cepat. Pilih perilaku tersebut sebelum memilih jadwal per jam atau harian.

Panduan lapangan OffVPS · Ditinjau · 5 menit baca

Tentukan satu pekerjaan yang terbatas

Bayangkan alat pribadi yang membangun ulang ringkasan harian kecil dari catatan yang ada. Tugas membaca kumpulan data terbatas, menyiapkan satu ringkasan pengganti, dan keluar. Ini bukan server web dan tidak boleh terus berjalan di antara waktu mulai terjadwal. Catat input, tujuan, perkiraan durasi, dan apa yang dianggap sukses sebelum menambahkan timer.

Contoh mengasumsikan host Linux dengan systemd dan util-linux flock, akses administrator, dan akun serta grup tanpa hak istimewa yang sudah ada bernama fieldjob. Skrip tugas yang telah ditinjau terletak di /opt/field-jobs/build-summary dan berjalan di latar depan. Administrator memiliki skrip itu; akun tugas dapat membacanya dan menjalankannya tetapi tidak dapat menulis ulang kodenya. Periksa jalur yang dapat dieksekusi pada distribusi Anda. Ini adalah templat, bukan layanan penjadwalan OffVPS yang terpasang.

Skrip harus melaporkan kegagalan dengan status keluar bukan nol. Untuk file pengganti, rancang agar menyiapkan dan memeriksa hasil sementara sebelum menerbitkannya. Untuk pekerjaan basis data, gunakan mekanisme transaksi atau deduplikasi basis data. Kunci saja tidak dapat membuat tugas yang belum selesai aman untuk diulang.

Pilih zona waktu dan kebijakan eksekusi terlewat

Ringkasan kami berguna sekali sehari pada 02:15 UTC. Gunakan zona eksplisit agar zona waktu lokal mesin tidak menjadi dependensi tak terlihat. UTC menghindari perubahan jam musiman dalam contoh ini; tugas bisnis yang terkait dengan waktu sipil lokal memerlukan zona waktu bernama dan tinjauan perilaku daylight-saving-nya. Referensi waktu systemd menjelaskan ekspresi kalender.

Simpan templat ini sebagai /etc/systemd/system/field-summary.timer pada VPS yang dimaksud setelah meninjau nama:

[Unit]
Description=Daily personal-tool summary

[Timer]
OnCalendar=*-*-* 02:15:00 UTC
Persistent=true
Unit=field-summary.service

[Install]
WantedBy=timers.target

Persistent=true meminta aktivasi susulan setelah periode tidak aktif jika peristiwa kalender terlewat. Ini tidak memutar ulang eksekusi terpisah untuk setiap hari yang terlewat. Timer juga tidak memulai instance lain dari layanan yang sama saat layanan itu aktif. Perilaku ini, dan akurasi penjadwalan, dibahas dalam referensi timer. Putuskan apakah ringkasan terlambat berguna sebelum mengaktifkan susulan.

Tetapkan pengguna layanan, direktori status, dan kunci

Pasangan /etc/systemd/system/field-summary.service menjelaskan pekerjaan:

[Unit]
Description=Build the personal-tool summary

[Service]
Type=oneshot
User=fieldjob
Group=fieldjob
WorkingDirectory=/opt/field-jobs
StateDirectory=field-summary
StateDirectoryMode=0700
UMask=0077
ExecStart=/usr/bin/flock --nonblock --conflict-exit-code 75 /var/lib/field-summary/job.lock /opt/field-jobs/build-summary
TimeoutStartSec=5min
StandardOutput=journal
StandardError=journal

Type=oneshot cocok untuk perintah yang selesai; timeout startup eksplisit membatasi contoh ini. Jangan tambahkan RemainAfterExit=yes ke layanan yang harus menjadi tidak aktif setelah setiap eksekusi. Lihat semantik layanan systemd. Tetapkan timeout dari beban kerja, dan buat interupsi aman daripada mengasumsikan lima menit cocok untuk setiap tugas.

Untuk layanan sistem ini, StateDirectory membuat direktori bernama di bawah /var/lib dengan kepemilikan layanan. Direktori kerja, pengguna, izin, dan tujuan output bersifat eksplisit; skrip harus menggunakan jalur absolut untuk alat dan datanya sendiri. Aturan lingkungan dan direktori didokumentasikan dalam referensi eksekusi systemd. Jangan letakkan nilai rahasia dalam argumen baris perintah atau mencatatnya.

Pembungkus nonblocking flock keluar dengan kode 75 saat pemanggilan kooperatif lain memegang kunci ini. Kami sengaja membiarkannya sebagai kegagalan yang terlihat dan perlu ditinjau, bukan memperlakukan ringkasan yang dilewati sebagai pekerjaan yang selesai. Semua pemanggilan manual harus menggunakan pembungkus dan jalur kunci yang sama. Jangan hapus file kunci untuk melepaskan tugas yang sedang berjalan: file baru dapat membuat kunci terpisah. Ini adalah pola filesystem lokal, bukan kunci terdistribusi di seluruh instance VPS. Lihat manual flock upstream.

Periksa file, lalu coba satu eksekusi terkendali

Gunakan dataset sekali pakai dengan email keluar, pembayaran, dan efek samping lain dinonaktifkan untuk eksekusi pertama. Sebelum aktivasi, periksa jadwal yang diuraikan dan file unit pada host pengujian itu:

systemd-analyze calendar '*-*-* 02:15:00 UTC'
systemd-analyze verify /etc/systemd/system/field-summary.service /etc/systemd/system/field-summary.timer

Pemeriksaan ini dapat menangkap kesalahan unit dan jadwal; namun tidak dapat memastikan bahwa skrip Anda menghasilkan ringkasan yang benar. Referensi systemd-analyze menjelaskan cakupannya. Setelah memperbaiki kesalahan, muat file yang telah ditinjau dan jalankan tugas pengujian secara eksplisit:

sudo systemctl daemon-reload &&
  sudo systemctl start field-summary.service
systemctl status field-summary.service --no-pager
sudo journalctl -u field-summary.service --since "10 minutes ago" --no-pager

Harapkan pemanggilan berhasil yang terbatas dan artefak keluaran yang diperiksa; oneshot yang berhasil mungkin menampilkan tidak aktif setelahnya. Periksa hasilnya sendiri, termasuk perilaku input kosong. Buat eksekusi khusus pengujian sengaja lambat, panggil perintah terkunci yang sama dua kali pada dataset pengujian, dan verifikasi bahwa pemanggilan kedua melaporkan kontensi kunci tanpa menulis hasil saingan.

Aktifkan jadwal hanya setelah memeriksa outputnya

sudo systemctl enable --now field-summary.timer
systemctl list-timers field-summary.timer --all

Periksa waktu terjadwal berikutnya, lalu tinjau hasil terjadwal pertama. Simpan waktu mulai, waktu selesai, jumlah item yang diproses dan hasil di log skrip. Tidak adanya catatan keberhasilan adalah alasan untuk memeriksa, bukan bukti bahwa pekerjaan berjalan. Rujuk perintah timer dan aktivasi systemctl.

Untuk menjeda mulai di masa mendatang, gunakan sudo systemctl disable --now field-summary.timer. Itu tidak menghentikan layanan yang sedang berjalan. Jika interupsi diperlukan, pertama pastikan apakah penulisan saat ini dapat dihentikan dengan aman. Seiring bertambahnya pekerjaan, tinjau durasi, percobaan ulang dan batas API eksternal; beberapa mesin memerlukan koordinasi bersama. Lanjutkan dengan skenario alat pribadi dan latihan pemulihan untuk data yang dipelihara oleh otomatisasi ini.

Dokumentasi yang digunakan

Referensi utama untuk halaman ini. Periksa dokumentasi untuk versi yang terpasang di lingkungan Anda sendiri.