Langkau ke kandungan
ToolMug

Penjana Fail Perkhidmatan systemd

Pastikan program Node.js, Python atau Go terus berjalan pada pelayan Linux, bermula semasa but dan dimulakan semula apabila ranap — tanpa perlu mengingati setiap pilihan systemd. Isi perintah dan pengguna, pilih dasar mula semula dan pemboleh ubah persekitaran, kemudian salin fail .service bersama perintah untuk memasang dan memulakannya. Tandakan Jalankan mengikut jadual untuk mendapatkan .timer sebagai alternatif moden kepada cron.

Berjalan dalam pelayar anda — apa yang anda masukkan tidak dimuat naik

Menjadi nama fail, cth. myapp → myapp.service

Gunakan laluan penuh ke program, cth. /usr/bin/python3 app.py

Perintah terus berjalan di latar depan (kebanyakan aplikasi web dan skrip).

Satu KEY=value setiap baris; nilai yang mengandungi ruang akan diberi tanda petikan secara automatik.

0 mengekalkan lalai sistem.

myapp.service

Pasang dan mulakan

Tampal perintah pada pelayan sebagai root. Selepas mengedit fail unit, jalankan semula systemctl daemon-reload. Log: journalctl -u <nama>.

Cara menggunakan

  1. Masukkan nama perkhidmatan, perintah dengan laluan penuh dan direktori kerja.
  2. Tetapkan pengguna, dasar mula semula dan sebarang pemboleh ubah persekitaran.
  3. Jika perlu, tambah pengukuhan asas atau jadual (OnCalendar) untuk mencipta pemasa.
  4. 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.

Alat berkaitan