Generator Unit systemd
Layanan yang menyala sendiri dan pulih setelah gagal
Susun file unit .service dan .timer lengkap dengan kebijakan jalan-ulang, batas pengaman, pengalihan log ke journal, dan pembatas keamanan yang setiap barisnya dijelaskan.
Simpan ke /etc/systemd/system/, lalu jalankan systemctl daemon-reload. Langkah lengkapnya ada di bagian bawah hasil.
Seluruh perhitungan berjalan di browser Anda. Alamat IP, nama interface, dan password yang Anda masukkan tidak pernah dikirim ke server CoreNet.
Kapan sebuah program layak dijadikan layanan
Ketika ia harus hidup terus, menyala sendiri setelah mesin dinyalakan ulang, dan pulih sendiri bila mati. nohup ... & memenuhi yang pertama saja, dan hilang begitu session SSH ditutup.
Batas pengaman yang sering dilupakan
Restart=always tanpa batas adalah cara membanjiri log dalam hitungan menit: program yang gagal seketika akan dijalankan ulang tanpa henti. Unit yang dihasilkan di sini menyertakan:
StartLimitBurst=5
StartLimitIntervalSec=60Setelah lima kegagalan dalam satu menit, systemd berhenti mencoba dan meninggalkan jejak yang dapat dibaca — jauh lebih berguna daripada log sepuluh gigabita.
Pembatas keamanan, dan efek sampingnya
Baris seperti ProtectSystem=full dan PrivateTmp=yes membatasi apa yang dapat disentuh layanan seandainya ia dibobol. Nilainya nyata, tetapi ada harganya yang perlu diketahui sejak awal:
Bila layanan tiba-tiba gagal dengan "Permission denied" pada folder yang jelas-jelas berhak ditulis, salah satu baris pembatas inilah penyebabnya — bukan hak akses filenya. ProtectSystem=full membuat hampir seluruh sistem file menjadi hanya-baca dari sudut pandang layanan itu.
Jalan keluarnya bukan mematikan pembatasnya, melainkan menyebutkan folder yang memang perlu ditulis:
ReadWritePaths=/var/www/app/writablesystemd timer sebagai pengganti cron
Untuk tugas berkala, timer punya dua keunggulan yang sering menentukan:
Persistent=true menjalankan tugas yang terlewat karena mesin sedang mati. Cron melewatkannya begitu saja — dan pada server yang dimatikan tiap malam, itu berarti backup harian yang tidak pernah berjalan.
RandomizedDelaySec menyebar waktu mulai secara acak. Ketika lima puluh mesin menjalankan update pada jadwal yang sama, penyebaran itu yang mencegah server tujuan tumbang.
Satu hal yang sering keliru: pada pola timer, yang di-enable adalah timer-nya, bukan service-nya. Meng-enable service akan membuatnya berjalan sekali saat boot lalu tidak pernah lagi.
After=network-online.target, bukan network.target
network.target hanya berarti "penyiapan jaringan sudah dimulai". Layanan yang butuh alamat IP sering menyala terlalu cepat karenanya, gagal menyambung, lalu masuk daur jalan-ulang. network-online.target menunggu sampai jaringan benar-benar siap.
Sesudah mengubah file unit
systemctl daemon-reload wajib diulang. Tanpa itu, systemd tetap memakai isi yang lama dan perubahan Anda seolah tidak berpengaruh sama sekali.
Pertanyaan yang sering diajukan
Kenapa layanan saya "active (exited)"? Karena Type=simple dipakai untuk program yang langsung selesai. Untuk tugas sekali jalan, pakai Type=oneshot dengan RemainAfterExit=yes.
Di mana lognya? journalctl -u nama-layanan -f. Tidak ada file log tersendiri kecuali Anda membuatnya.
Bolehkah User=root? Bisa, dan sebaiknya tidak. Layanan yang berjalan sebagai root memberi kuasa penuh kepada siapa pun yang berhasil membobolnya.