hizmet başlatılamadı


16

Bir systemd hizmeti oluşturdum:

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

/ Etc / systemd / system klasörüne koydum ve mine.service olarak adlandırdım.

Eğer sudo service mine startkoşarsam bana verir:

Mine.service başlatılamadı. Birim mine.service bulunamadı

--- GÜNCELLEME -----

Önce koşuyorum sudo systemctl daemon-reloadve şimdi bana mesaj vermiyor ama hizmet hala başlamıyor.


10
systemctl daemon-reloadBirim dosyanızı oluşturduktan sonra mı çalıştınız?
Wieland

@Wieland: Hmm..Şimdi bana hiç mesaj göstermiyor, ama yine de başlamıyor.
George

@don_crissti: Durum etkin olduğunu söylüyor ancak komut dosyası (ExecStart'ta) yürütülmüyor.
George

uygun $ HOME nasıl bilir? Sistem hizmeti için ne olmasını bekliyorsunuz?
Serge

@Serge: Hmm..Yani, $ HOME'u nasıl kullanabilirim?
George

Yanıtlar:


14

$HOMEkomut dosyasını çalıştıran kullanıcının giriş dizinini gösterir. Systemd hizmetleri root ile başlatılır, böylece muhtemelen denenir /root/theFolder/run.sh. Hizmet dosyalarında mutlak yollar kullanın.

Ayrıca forkingseçenek ayarlanmış. Bu kendilerini arka plan programı için gereklidir, senaryonuz bunu yapıyor mu? Çoğu yapmaz ve sizinkini almazsanız bu seçeneği kaldırmalısınız, aksi takdirde systemd komut dosyanızın başlatıldığını iddia etmesini bekler.

Ayrıca, ana dizininizdeki komut dosyalarına işaret eden sistem hizmeti dosyaları önerilmez ve güvenlikle ilgili bir sorun olabilir. Kök olarak çalıştırıldıklarından, bunları değiştirebilen herkes bilgisayarınıza kök erişimi sağlayabilir. Betiği kopyalamak ve /usr/local/binsahip olunmasını sağlamak çok daha iyidir ve bunu durdurmak için yalnızca kök tarafından yazılabilir. Hizmet dosyasındaki User=ve Group=seçeneklerini kullanarak komut dosyasını ayrıcalıklı bir kullanıcı olarak çalıştırmak da iyi bir fikirdir .

Kullanıcı olarak çalıştırmak istiyorsanız, hizmet dosyasını koymak ~/.config/systemd/user/ve başlatmak / etkinleştirmek daha iyidir systemctl --user enable yourservice && systemctl --user start yourservice(not, kullanıcı root değil olarak çalıştırın). Bkz Bu kullanıcının servis dosyaları hakkında daha fazla bilgi için.


: Komut dosyasını / usr / local / bin'e ve hizmeti /.config/systemd/user içine koydum. Hizmeti etkinleştirmeye çalışırsam bana "fazla argümanlar" gösterir. Systemctl kullanmaya çalışırsam .. birim .. ', böyle bir şey.
George

Denediğiniz komutların tamamını ve daha ayrıntılı günlükleri sağlayabilir misiniz? Parçalarla hata ayıklamak zor.
Michael Daffin

:? G / usr / local / bin senaryoyu koyarsanız $ HOME.I gördüğümüz için, bu göreli yolları kullanır Çünkü $ ANA yolunu kullanmak için bir çözüm var mı bu .Ve ben koymak için çalıştı HOME=$HOMEilk çevre dosyasında. Ancak hizmet başlatılamadı, hata yok.
George

1
Ubuntu üzerinde Ben systemd kullanarak bu sistemd için systemctl kullanmak zorunda kaldı, "Aşırı Arguments" bir hata var
Alexander Mills

1
@AlexanderMills Haklısınız, systemctl ve systemd içindeki doğru komut cevapta sadece bir yazım hatasıydı.
Michael Daffin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.