Tugas terjadwal yang berjalan tanpa VPN tampak baik-baik saja
Status menyebut berhasil dan datanya hilang. Syaratkan setiap proses pada koneksi yang tepat dan catat lewatan secara terpisah alih-alih memercayai jadwal.
Status tugas menyebut berhasil, log menunjukkan proses yang selesai, dan datanya basi atau tidak ada. Kombinasi itu biasanya berarti tugas terjadwal dimulai tanpa jalur yang dibutuhkannya, dan sesuatu di hilir menelan kegagalannya. Jadwal yang menyala tepat waktu tidak mengatakan apa pun tentang apakah jaringan siap. Celah antara kedua fakta itu adalah tempat kegagalan ini hidup.
Penerimaan milik proses, bukan keberadaan berkas cron.
Proses hijau bukan tugas yang selesai
Penjadwal mencatat bahwa sebuah proses dimulai dan kemudian keluar; ia tidak tahu apakah proses itu mencapai sumber daya yang menjadi alasan keberadaannya. Skrip yang memperlakukan koneksi gagal sebagai hasil kosong, atau menangkap galat dan keluar dengan nol, akan tampak sehat selamanya. Gejalanya bukan status merah; itu status yang masuk akal yang menempel pada pekerjaan yang hilang.
Namai apa yang sebenarnya dibutuhkan proses sebelum memutuskan cara memeriksanya. Cadangan mungkin membutuhkan DNS privat dan titik akhir terautentikasi, bukan sekadar proses terowongan.
Periksa koneksinya, bukan nama antarmukanya
Antarmuka bernama tun0 bisa ada tanpa sesi yang penting, dan koneksi lain bisa memiliki nama itu. Periksa objek spesifik yang menjadi sandaran tugas: satu identitas profil, satu instans layanan, atau operasi kecil yang disetujui terhadap sumber daya. Jaga pemeriksaan tetap terbatas waktu, dan jauhkan kredensial dari argumen proses dan log diagnostik.
Definisikan juga hasil saat terputus. Lewatan biasa, percobaan ulang dalam jendela singkat, dan tenggat terlewat yang terlihat oleh operator adalah tiga jawaban berbeda, dan jadwal berulang tidak memilih di antaranya.
Lewatan dan kegagalan adalah hasil yang berbeda
[Service] Type=oneshot User=worker ExecCondition=/usr/local/libexec/check-office-path ExecStart=/usr/local/bin/private-task
Pada penerapan systemd, ExecCondition= menjalankan pemeriksa itu sebelum beban kerja. Perilaku keluarnya spesifik: nol melanjutkan, kode dari satu sampai 254 melewati perintah mulai yang tersisa tanpa menandai unit gagal, dan 255 atau penghentian abnormal menggagalkannya. Itu memberi tiga sinyal berbeda, berguna hanya jika kontrak pemeriksa sengaja dipetakan ke sana. Pengaturan yang mendefinisikan ulang keberhasilan dapat mengubah gambaran, jadi dokumentasikan pemetaannya.
Mencatat lewatan itulah yang membuat desain jujur. Proses yang dilewati dan tidak muncul di mana pun tidak dapat dibedakan dari proses yang berhasil, dan memperlakukan setiap galat pemeriksa sebagai lewatan diam-diam menyembunyikan penerapan yang rusak tanpa batas.
Lindungi seluruh proses, bukan hanya awalnya
Pemeriksaan kesiapan mengamati dunia sebelum peluncuran; ia tidak mengawasi setiap soket sesudahnya. Ketika jalur langsung tidak pernah dapat diterima untuk tugas ini, lampirkan kebijakan keluar yang disetujui yang ditegakkan terus-menerus dan mencakup DNS, IPv6, dan transportasi terowongan itu sendiri. Mengalihkan status IPv6 global host bukan pengganti kebijakan terbatas pada tugas.
Putuskan apakah peristiwa baru boleh tumpang tindih dengan tugas yang masih berjalan, simpan aturan itu pada pemilik beban kerja, dan buat percobaan ulang aman untuk operasi data. Menghentikan tugas saat terputus membatasi pekerjaan tanpa menjamin apa pun tentang lalu lintas cadangan.
Terima alur kerja pada tiga kasus: jalur siap, jalur tidak tersedia, dan kehilangan di tengah proses. Apa pun yang kurang menguji jadwal, bukan tugas.