Sıra geldi bir servis oluşturma ve bu servisi başlatmaya. Öncelikle belirlememiz gereken ilk adım bir servisi neden başlatmamız gerektiğidir. Ne için bir servis çalıştıracağız? Log toplamak için mi? Bir uygulama çalıştırmak için mi? Ya da bir donanımla haberleşmek için mi? Bu bölümde basit bir C++ la yazılmış kodu servis olarak ayağa kaldıracağız ve bu kod parçası her 10 saniye de bir ekrana o an üzerinde bulunduğu index değerini yazacak. Bu örnek ilk örnek olduğu için biraz basit olacak.
İlk adımımızı belirlediğimize göre sıra ikinci adıma geldi. Yazacağımız kodun nasıl ve ne durumlarda çalışması gerektiğini ya da hangi ön koşullar sonucunda ve nasıl başlayacağını belirteceğimiz ve servisimizi ayağa kaldırmak için gerekli olan .service uzantılı dosyamızı yazmaya. Bu dosya içinde oldukça detaylı bir bölüm yapabiliriz ancak bu bölümde basit bir yazımla anlatımımızı gerçekleştiriyor olacağız.
Şimdi öncelikle yazmış olduğumuz koda bakalım.
#include <iostream>
#include <unistd.h>
int main(int argc, const char** argv)
{
int i = 0;
while(1)
{
std::cout << "Index: " << i << std::endl;
i++;
sleep(10);
}
return 0;
}
Kodu kısaca açıklayacak olursak, her 10 saniyede bir index değerini ekrana yazdıran bir kod.
Biz yine de basit bir servis ayağa kaldırmak için std::cout ile ekrana çıktı alacağız. Kod tarafında c++ ile daha detaylı bir geliştirme yapmak istiyorsanız lütfen şu makaleleri okuyunuz.
Derlemiş olduğumuz kodun nerede olduğunun bir önemi yok ama yine de /usr/bin/ dizini içine taşırsanız daha güzel bir çalışma elde etmiş olursunuz. Kodumuzu yazdığımıza, derlemeyi tamamladğımıza ve binary dosyamızın konumunu belirlediğimize göre sıra en önemli dosyaya yani .service dosyasını yazmaya geldi.
Öncelikle yazmış olduğum service dosyasını şu şekilde gösteriyim.
[Unit]
Description=Super simple daemon
[Service]
Type=simple
ExecStart=/home/user_name/Desktop/Linux-Service/simple-daemon
[Install]
WantedBy=multi-user.target
Bu service dosyası da aslında en basit hali ile konfigüre edilmiştir. Çok detaylı ve karışık konfigürasyonlar yapabilirsiniz.
Kısaca yapmış olduğumuz konfigürasyonları açıklayacak olursak;
Description: | Servis açıklaması |
Type: | Simple ile herhangi bir zamanda yalnızca bir instance çalışacaktır. |
ExecStart: | Çalıştırmak istediğimiz binary ve dosya adı |
WantedBy: | Servisimizin hangi seviyede çalışacağını gösterir. Dolayısıyla, hizmetimizi etkinleştirirsek, multi-user.target.wants klasöründe, bu hizmete sembolik bir bağlantı oluşturulacaktır. Disable edildiğinde de silinir. |
Service dosyamızı da yazdığımıza göre geriye yapmamız gerekenler önce .service dosyasını /etc/systemd/system/ klasörüne taşımak ve sudo systemctl start dosya-adi.service komutunu çalıştırmak.
Sırasıyla şu komutları çalıştırdığımız zaman,
sudo systemctl start simple-daemon.service
sudo systemctl status simple-daemon.service
Şu şekilde bir konsole çıktısı görmemiz gerekiyor.

Böyle bir çıktıyla karşılaştıysanız tebrikler servisiniz çalışıyor demektir. Bu yazı ile basit bir şekilde bir C++ kodunu servis olarak nasıl ayağa kaldırırız onu görmüş olduk. Daha detaylı olarak servis geliştirmek istiyorsanız daha detaylı dökümanlar takip etmelisiniz. Umarım faydalı olmuştur.