Systemd ile Nasıl Yapılır (daha kolaydır)
Şimdi Ubuntu varyantları ve Mint sisteme taşındıklarına göre, eski çözümlerimi yukarıdakilere dayanarak daha az tatmin edici buldum. Sistemd ile nasıl yapılacağını öğrenmek için web'de arama yaptım ve başkalarının bilgeliğini birleştirip blogspot.com.au'da aşağıdaki öğreticiyi içeren bir blog yazısı olarak belgeledim .
Systemd ile, aşağıdaki şablonları kullanarak komut dosyalarınızı çağırmak için bir veya iki dosya oluşturursunuz ve birkaç komut çalıştırırsınız. Basit.
GUI Sürümü
İlk olarak başlangıç ve / veya kapanışta çalıştırmak istediğiniz komut dosyalarını oluşturun. Her ikisine de ihtiyacınız yoksa bir tane yapın. .Scopening_atstart ve .scfullcopy_atend oluşturdum.
Ardından , dosyayı sağ tıklayıp özellikleri seçerek ve izinler altında Dosyayı program olarak yürütülmesine izin ver seçeneğini işaretlediğinizden emin olarak her ikisinin de yürütülebilir olduğundan emin olun.
Oluşturduğum iki dosya bir ramdisk içeriğini doldurur ve kaydeder. Ayrıca hizmetin çalıştığını kanıtlamak için ana dizinimde bir dosya oluştururlar. Onlar şu şekildeydi:
#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time
Sonra dosya yöneticimi root olarak açtım, /etc/systemd/system
bir dosya startup.service ve save-ramdisk.service dosyası oluşturdum. Açıkçası kendi adlarınızı seçebilirsiniz ve genel adlar johns_start.service adlı bir başlangıç dosyası ve johns_shutdown.service adlı bir kapatma dosyası içerebilir. Mevcut servis adlarını seçmeyin.
[Unit]
Description=Startup Applications
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart
[Install]
WantedBy=multi-user.target
ve
[Unit]
Description=Save Ramdisk to Wine drive C
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend
[Install]
WantedBy=multi-user.target
Yürütülebilir komut dosyanızın tam yolunu benimkiyle değiştirerek aynı hizmet dosyalarını kullanabilirsiniz.
Son olarak , her biri için systemctl komutunu çalıştırınız. Dosya_adı (ancak sonek hizmeti olmadan). Yani benim ilkimsystemctl enable startup
Hizmetleri başlatmak için bilgisayarı bir kez yeniden başlatın. Sistem çok kullanıcılı hedefe her girdiğinde başlatma hizmeti ve çok kullanıcılı hedeften çıktığında durdurma hizmeti yürütülür. Farklı etkinleştirme koşullarına sahip alternatif servis dosyaları aşağıda açıklanacaktır.
Ek faydalı komutlar şunları içerir:
systemctl etkin başlangıç
sistemctl etkin başlangıç
systemctl yeniden başlatma
Yukarıdaki referansta daha fazla bilgi bulunabilir.
CLI (Komut Satırı) Sürümü
Bu açıklama, / home / john yerine ana dizininizden çalıştığınızı, gerektiğinde sudo kullandığınızı ve vim veya svim yazdığım editör seçiminizi yaptığınızı varsayar.
İlk satırla başlatma ve kapatma kabuğu komut dosyaları oluşturun ve #!/bin/sh
bunları kullanarak çalıştırılabilir yapın chmod +x my_new_filename
.
Create yukarıdaki gibi iki dosya veya bu örnekte, bir dosya tanıtıcısı başlatma ve kapatma görevlere. Ana dizindeki komut dosyalarını yürüteceğim ama @don_crissti Stack Exchange'de bazı alternatifler gösteriyor .
svim /etc/systemd/system/start_and_stop.service
ve dosya içeriğini kopyalayın:
[Unit]
Description=Run Scripts at Start and Stop
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands #your paths and filenames
ExecStop=/home/john/.shutdown_commands
[Install]
WantedBy=multi-user.target
Ardından Hizmeti şu komutla etkinleştirin :
systemctl enable start_and_stop
sisteminizi yeniden başlatın ve ardından hizmetler etkinleşir. Komutlar systemctl is-enabled start_and_stop
ve systemctl is-active start_and_stop
yeni hizmetlerinizi izlemede kullanılabilir.
Kapatma Tetikleme Koşullarını Değiştirme
Her şeyden önce dosyalar, komut dosyalarını çalıştırmayı başlatmak için çok kullanıcılı ortamın açılmasını veya kapatılmasını kullanır. Aşağıdaki dosya, komut dosyalarını başlatmak için dört olası kapatma işleminin başlangıcını kullanır. Önceki satırında + WantedBy satırında hedefler eklemek veya kaldırmak, daha ince ayrımlar yapmanıza olanak tanır:
Bu dosya, bu yayının ikinci cevabında önerildi, ancak bir Yükleme bölümü ekleyene kadar çalıştıramadım.
Yine, betiği düzenleyin /etc/systemd/service/
ve kullanarak etkinleştirin systemctl enable your_file_name
. Hedefleri değiştirdiğimde systemclt disable file_name
komutu kullandım ve yeniden etkinleştirerek hedef dizinlere bağlandı. Yeniden başlatın ve servis çalışacaktır.
[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/home/john/.my_script #your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target