Cara menggunakan
- Masukkan nama perkhidmatan, perintah dengan laluan penuh dan direktori kerja.
- Tetapkan pengguna, dasar mula semula dan sebarang pemboleh ubah persekitaran.
- Jika perlu, tambah pengukuhan asas atau jadual (OnCalendar) untuk mencipta pemasa.
- Salin fail yang dijana, atau tampal perintah pemasangan ke dalam shell root pada pelayan.
Penerangan pilihan
- Type
- simple sesuai untuk program yang kekal di latar depan; oneshot sesuai untuk skrip yang berjalan sekali, seperti tugas berjadual.
- Restart
- Apabila gagal memulakan semula perkhidmatan apabila ia keluar dengan ralat atau ranap; Sentiasa memulakannya semula juga selepas keluar biasa.
- OnCalendar
- Bila pemasa dicetuskan, cth. daily atau *-*-* 03:00:00 untuk pukul 3 pagi setiap hari. Uji ungkapan dengan systemd-analyze calendar.
Contoh: tugas malam sebagai pemasa
Untuk menjalankan skrip setiap malam pada pukul 3 pagi, tetapkan Perintah (ExecStart) kepada /usr/local/bin/backup.sh, nama perkhidmatan kepada backup, Type kepada oneshot dan Restart kepada Never, kemudian tandakan “Run on a schedule (create a .timer)” dan “Basic hardening”. Dengan pengguna dan direktori kerja lalai, penjana menghasilkan dua fail. backup.service:
[Unit]
Description=Nightly backup
[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only
dan backup.timer:
[Unit]
Description=Run backup on a schedule
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service
[Install]
WantedBy=timers.target
Dua perkara berubah apabila pemasa dihidupkan. Fail perkhidmatan kehilangan bahagian [Install]nya, kerana pemasa memulakannya sebaliknya, dan arahan pemasangan mengaktifkan pemasa dan bukannya perkhidmatan:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f
Type tidak ditukar untuk anda apabila anda menandakan pilihan pemasa, jadi pilih oneshot sendiri untuk tugas yang selesai. Perkhidmatan oneshot yang digabungkan dengan Restart Always tidak sah, jadi penjana meninggalkan Restart dan menunjukkan amaran.
Soalan lazim
Di mana saya letakkan fail itu?
Dalam /etc/systemd/system/. Kemudian jalankan systemctl daemon-reload dan systemctl enable --now <nama>.service — perintah yang dijana melakukan semuanya.
Mengapa perkhidmatan saya gagal dengan “Executable path is not absolute”?
systemd versi lama memerlukan laluan penuh ke program dalam ExecStart. Cari dengan which, cth. which node.
Pemasa atau cron?
Pemasa menulis log ke jurnal, boleh mengejar larian yang terlepas semasa pelayan dimatikan, dan tidak pernah berjalan dua kali serentak. cron lebih ringkas untuk perintah satu baris dan masih berfungsi dengan baik.
Privasi
Alat ini berjalan sepenuhnya dalam pelayar anda. Fail dan teks anda diproses pada peranti anda dan tidak pernah dimuat naik ke pelayan kami.