Dalam skenario umum, selama proses boot, skrip startup sistem run-level dijalankan satu per satu.
Skrip startup level run tertentu tidak akan dijalankan hingga skrip sebelumnya dieksekusi sepenuhnya. Jika layanan tertentu selama pengaktifan terhenti karena suatu alasan, mungkin diperlukan beberapa saat sebelum waktu habis dan beralih ke skrip pengaktifan berikutnya.
Utilitas Startpar digunakan untuk menjalankan beberapa skrip run-level secara paralel. Ini membantu mempercepat proses boot server Anda.
Utilitas Startpar adalah bagian dari paket sysvinit.
Sintaks umum untuk startpar diberikan di bawah ini:
startpar –p par –i iorate –t timeout –T global timeout –a arg prg1 prg2 startpar –p par –I iorate –t timeout –T global timeout –M boot|start|stop
Berikut ini adalah berbagai pilihan startpar:
- -p Jumlah proses untuk dijalankan secara paralel.
- -i Mengubah faktor penimbangan blok proses. Standarnya adalah 800.
- -t Timeout untuk mengosongkan buffer skrip jika tidak ada output yang terjadi.
- -T Batas waktu global. Ini digunakan untuk menghapus output buffer dari skrip sebelumnya .
- -a Argumen yang akan diberikan ke semua skrip.
- -M Beralih startpar ke mode "buat".
- -P Tentukan run-level sebelumnya
- -N Tentukan run-level berikutnya
Saat startpar mengeksekusi skrip run-level, output skrip di-buffer untuk memungkinkan penulisan terkontrol ke fasilitas logging.
Jika skrip lain berjalan secara paralel, maka skrip tersebut menunggu logging selesai dan kemudian menulis data dari buffer ke area logging. Opsi –t dan –T digunakan untuk mengontrol pembersihan buffer ini tergantung pada waktu sejak output terakhir yang ditangkap ke buffer.
Di sistem saya, saya memiliki versi berikut untuk startpar:
# startpar -v startpar version 0.54
Perintah Startpar dapat digunakan dalam mode “make” menggunakan opsi –M. Dalam mode ini, startpar menggunakan file berikut untuk memutuskan bagaimana menjalankan skrip startup.
/etc/init.d/.depend.start
/etc/init.d/.depend.stop
/etc/init.d/.depend.boot
Berikut ini contoh file .depend.start:
# cat /etc/init.d/.depend.start TARGETS = halt fbset lvm_wait_merge_snapshot microcode.ctl earlysyslog dbus acpid random purge-kernels reboot network haldaemon boot.clock syslog ford_tso_off Sts splash_early haveged rpcbind multipathd nfs smbfs kbd irq_balancer alsasound mcelog network-remotefs sshd java.binfmt_misc clamd logd gpm ntp single atd clamav-milter canna amavis cups nscd postfix xdm cron smartd INTERACTIVE = kbd ntp single network: dbus haldaemon: dbus acpid syslog: network earlysyslog ford_tso_off: network Sts: network splash_early: syslog haveged: syslog random rpcbind: syslog multipathd: syslog nfs: rpcbind . . . . mcelog: smbfs network-remotefs: smbfs haldaemon
Dalam mode “make”, startpar menggunakan file .depend.start untuk menemukan layanan dependen mana yang perlu dimulai untuk memulai layanan tertentu.
Pada ouput di atas, ketika startpar dijalankan dengan mode start menggunakan opsi make, skrip dependen dijalankan terlebih dahulu sebelum skrip dieksekusi secara paralel.
Berikut adalah contoh bagaimana startpar dapat digunakan dalam mode make selama urutan startup sistem,
# startpar -p 4 -t 20 -T 3 -M start -P N -R 2 D-Bus already started. Not starting. Starting acpid done Re-Starting syslog services done Starting service at daemon done Starting sound driver done Starting cupsd done Starting CRON daemon/usr/sbin/cron: can't lock /var/run/cron.pid, otherpid may be 3506: Resource temporarily unavailable startproc: exit status of parent of /usr/sbin/cron: 1 done Starting irqbalance unused HAL already started. Not starting. Starting mcelog... already running done Setting up network interfaces: eth0 device: Intel Corporation 82545EM Gigabit Ethernet Co eth0 IP address: 19.86.xxx.xxx/24 done eth1 device: Intel Corporation 82545EM Gigabit Ethernet Co eth1 IP address: 19.86.xxx.xxx/24 done Setting up service network . . . . . . . . . . done Hint: you may set mandatory devices in /etc/sysconfig/network/config Setting up (remotefs) network interfaces: Setting up service (remotefs) network . . . . . . . . . . done Initializing random number generator done Starting smartd unused Disabling TSO on all interfaces and adding ETHTOOL_OPTIONS to nic config files done Re-Starting syslog services done Starting haveged daemon done failed_service="alsasound" skipped_service="irq_balancer smartd"
Pada contoh di atas, startpar dijalankan dengan jumlah total 4 proses untuk berjalan secara paralel dengan batas waktu 20 detik, batas waktu global 3 detik untuk mengosongkan area buffer, -M dalam mode make dengan opsi "mulai" untuk menunjukkan startup adalah digunakan dalam urutan awal.
Ini akan menggunakan /etc/init.d/.depend. start file untuk memverifikasi skrip yang saling bergantung. –P adalah run-level sebelumnya –N adalah runlevel baru.
Berikut adalah contoh lain untuk menggunakan startpar hanya untuk menjalankan 2 skrip secara paralel, Anda juga dapat menentukan skrip ini di /etc/init.d/rc untuk memastikan skrip ini dimulai secara paralel selama startup sistem jika diperlukan.
# startpar -p 4 -t 20 -T 3 -a start /etc/init.d/ypxfrd /etc/init.d/drbd Starting rpc.ypxfrd done Starting DRBD resources: . .
Juga di beberapa distro Linux, Anda dapat mengatur sistem untuk menggunakan opsi startpar di file /etc/init.d/rc.
Dalam file rc, cukup ubah nilai “CONCURRENCY=SHELL” menjadi “CONCURRENCY=STARTPAR”, yang akan menghitung dependensi secara otomatis dan memulai skrip yang berlaku secara paralel.
# vi /etc/init.d/rc CONCURRENCY=STARTPAR