Systemd ile nasıl yapılır
Haziran 2016'dan sonra bu konuyu bulursanız, Ubuntu ve Mint dahil türevleri, sistemin başlatılmasını ve kapatılmasını kontrol etmek için systemd'yi kullanacaktır. Eski yaklaşımla ilgili problemlerim vardı, bu yüzden sistem yolu araştırıldı.
Systemd ile, aşağıdaki şablonları kullanarak scriptlerinizi çağırmak için bir veya iki dosya oluşturun ve bir komutu çalıştırın. Basit.
GUI Sürümü
Öncelikle , başlangıçta ve / veya kapanışta çalıştırmak istediğiniz komut dosyalarını oluşturun. .Scopening_atstart ve .scfullcopy_atend 'ı oluşturdum.
Sonra her ikisinin de çalıştırılabilir olduğundan emin olun, dosyayı sağ tıklayın, özellikleri seçin ve izinler altında, dosyayı bir program olarak yürütmeye izin ver seçeneğinin işaretli olduğundan emin olun.
Oluşturduğum iki dosya bir ramdisk içeriğini dolduruyor ve kaydediyor. Ayrıca, servisin çalıştığını kanıtlamak için giriş dizinimde bir dosya oluşturuyorlar. Şeklindeydiler:
#!/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
Daha sonra dosya yöneticimi root olarak açtım, açtım /etc/systemd/system
ve bir dosya açıldı startup.service ve bir dosya save-ramdisk.service. Açıkçası kendi adı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. Sadece 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
Çalıştırılabilir betiğinizin tam yolunu benim için değiştirerek aynı hizmet dosyalarını kullanabilirsiniz.
Son olarak , her biri systemctl komutunu çalıştırınız, your_files_name (ancak sonek servisi olmadan). Yani benim birincisiydisystemctl enable startup
Hizmetleri başlatmak için bilgisayarı bir kez yeniden başlatın. Start hizmeti, sistem kullanıcı çok kullanıcılı hedefine her girdiğinde ve çok kullanıcılı hedefinden çıktığında stop servisine yürütülür. Farklı aktivasyon koşullarına sahip alternatif servis dosyaları aşağıda açıklanacaktır.
CLI (Komut Satırı) Sürümü
Bu açıklama / home / john yerine home dizininizden çalıştığınızı, gerektiğinde sudo kullandığını ve vim veya svim yazdığım bir editör seçimini yaptığınızı varsayar.
İlk satırda başlatma ve kapatma kabuğu komut dosyaları oluşturun ve #!/bin/sh
bunları çalıştırılabilir hale getirin chmod +x my_new_filename
.
Yukarıdaki gibi iki dosya oluşturun veya bu örnekte, başlatma ve kapatma görevlerini işlemek için bir dosya oluşturun. Komut dizilerini ev dizinimde çalıştıracağım ama @ don_crissti Stack Exchange'de bazı alternatifler gösterdi.
svim /etc/systemd/system/start_and_stop.service
ve dosya içeriğine 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
ve servislerin aktif olacağı sisteminizi yeniden başlatınız. Komutlar systemctl is-enabled start_and_stop
ve systemctl is-active start_and_stop
yeni hizmetlerinizin izlenmesinde kullanılabilir.
Kapatma için Tetikleme Koşullarını Değiştirme
Her şeyden önce dosyalar, komut dosyalarını çalıştırmaya başlamak 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. Önce satırına + WantedBy satırına hedefler ekleme veya kaldırma, daha ince ayrımlar yapmanıza olanak sağlar:
Bu dosya @Matthias tarafından Unix ve Linux'ta bir cevapta önerildi, ancak bir Kurulum bölümü ekleyene kadar çalışmasını sağlayamadım.
Yine komut dosyasını 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 sonra onu hedef dizinlere bağlayan yeniden etkinleştirdim. Yeniden başlattığınızda 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