Giriş
Bu dosya temel olarak [Unit], [Service], [Install] başlıklarından oluşur. Bu dosyanın yolu şöyledir.
Bu dosya temel olarak [Unit], [Service], [Install] başlıklarından oluşur. Bu dosyanın yolu şöyledir.
/etc/systemd/system/foo.serviceKullanım
Örnek
İsmi xrandr olan bir servis yaratmak isteyelim. İzlenecek adımlar şöyle. İkinci adım olan
İsmi xrandr olan bir servis yaratmak isteyelim. İzlenecek adımlar şöyle. İkinci adım olan
"systemctl enable ..." ile bilgisayar tekrar başlatılınca servis te çalışır.
Service Template
Bazı servisler bilgisayar açılırken değil, bir istek gelince çalışmak üzere (instantiated) ayarlanabilir. Buna service template deniliyor. Açıklaması şöyle.
Description, ConditionPathExists, After alanları olabilir.
After Olarak network.target ve network-online.target Değerleri
Açıklaması şöyle. Servisimiz network başladıktan sonra çalışsın isteyebiliriz.
Type, RemainAfterExit, ExecStart, ExecStartPre, ExecStartPost, ExecStop alanları olabilir. EnvironmentFile ile dosyadan değerler okunabilir
- Create a /etc/systemd/system/xrandr.service file (you could specify the service name you like) - sudo chmod 664 /etc/systemd/system/xrandr.service
- sudo systemctl enable xrandr.service
- Check if it is working by sudo systemctl start xrandr.service
Örnek
Açıklaması şöyle
To make your service start automatically upon boot, runsystemctl --user enable my_example.serviceIf you want to start the service immediately, without rebooting, runsystemctl --user start my_example.serviceIf you want to stop the service, runsystemctl --user stop my_example.serviceTo check the status of your service, runsystemctl --user status my_example.service
Bazı servisler bilgisayar açılırken değil, bir istek gelince çalışmak üzere (instantiated) ayarlanabilir. Buna service template deniliyor. Açıklaması şöyle.
It is possible for systemd services to take a single argument via the "service@argument.service" syntax. Such services are called "instantiated" services, while the unit definition without the argument parameter is called a "template". An example could be a dhcpcd@.service service template which takes a network interface as a parameter to form an instantiated service. Within the service file, this parameter or "instance name" can be accessed with %-specifiers.Açıklaması şöyle.
Some applications, like ssh have a unit file that ends with @, like ssh.service and ssh@.service1. [Unit] Başlığı
Description, ConditionPathExists, After alanları olabilir.
After Olarak network.target ve network-online.target Değerleri
Açıklaması şöyle. Servisimiz network başladıktan sonra çalışsın isteyebiliriz.
network.target has very little meaning during start-up.Şöyle yaparız
network-online.target is a target that actively waits until the nework is "up"
[Unit]
Description=Streamer
After=multi-user.target sound.target network.target
[Service]
ExecStart=/home/pi/run.sh
KillMode=control-group
Restart=on-failure
TimeoutSec=1
[Install]
WantedBy=multi-user.target
Alias=streaming.service
2. [Service] Başlığı - Çalıştırılacak Uygulama Burada TanımlanırType, RemainAfterExit, ExecStart, ExecStartPre, ExecStartPost, ExecStop alanları olabilir. EnvironmentFile ile dosyadan değerler okunabilir
Örnek
Şöyle yaparız. EnvironmentFile dosyasında PORT değeri okunur. Bu değere ${PORT} ile erişilir.
[Service]
Type=simple
EnvironmentFile=/etc/my-service/my-service-systemd.cfg
ExecStart=/usr/local/bin/my-service -port=-port=${PORT}
ExecStop=/bin/kill -15 $MAINPID
Type=simple Nedir
Type alanı oneshot,forking,notify gibi değerler alabilir.
Açıklaması şöyle
Service management subsystems launch service processes in dæmon context already. Those processes do not need to "dæmonize". ... They already have the environment values, and open file descriptors, appropriate to dæmon context, and the several things done by "dæmonization" in fact thwart some of the conventional things that are regularly done with dæmons (e.g. capturing their standard outputs/errors to a log) by service managers.
Açıklaması şöyle
The currently popular systemd init system does not use a shell at all when starting services, so you can define a .service and start it – the service's parent will be init itself. It also has a feature allowing temporary services to be created on-the-fly using systemd-run, with the same results.
Type = simple
... for type=forking jobs, indicates the process spawn directly by systemd ...
Örnek
Şöyle yaparız.
[Unit]
Description=Vendor's Application
After=network-online.target
[Service]
ExecStart=/path/to/wrapper start
ExecStop=/path/to/wrapper stop
Type=forking
[Install]
WantedBy=multi-user.target
ExecStart ile başlatılan script'in parent'ı Systemd olur. Bu script'in elle çalıştırılmadığını kontrol etmek için şöyle yaparız
if [[ $PPID -ne 1 ]]
then
echo "Don't call me directly; instead, call 'systemctl start/stop service-name'"
exit 1
fi >&2
Servis başlarken bir tane scrip çalıştırabilmeyi sağlar. Şöyle yaparız
[Unit]
After=multi-user.target
[Service]
User=your_user
ExecStart=/home/your_user/scripts/xrandr.sh
[Install]
WantedBy=default.target
Örnek
Şöyle yaparız
[Unit]
Description=[My example task]
[Service]
Type=simple
StandardOutput=journal
ExecStart=/usr/local/bin/mytask
[Install]
WantedBy=default.target
WorkingDirectory vermek için şöyle yaparız.
[Unit]
Description=My Smtp Service
After=multi-user.target
[Service]
Type=idle
WorkingDirectory=<my path script dir>
ExecStart=/usr/bin/python smtp.py
[Install]
WantedBy=multi-user.target
Örnek - ExecStop
Şöyle yaparız. Bu servis 1 saat uyuduktan sonra dururken iptables komutunu çalıştırır. Servisimiz başlamadan önce ExecStartPre ile iptables servisinin başlaması sağlanır.
Şöyle yaparız. Bu servis 1 saat uyuduktan sonra dururken iptables komutunu çalıştırır. Servisimiz başlamadan önce ExecStartPre ile iptables servisinin başlaması sağlanır.
[Unit]
Description=unblock internet 1 hour
[Service]
Type=simple
ExecStartPre=/usr/sbin/iptables ...
ExecStart=/usr/bin/sleep 3600
ExecStop=/usr/bin/iptables ...
3. [Install] Başlığı
WantedBy alanı olabilir.
Örnek
Şöyle yaparız.
[Unit]
Description=Copy user mac_override.link
ConditionPathExists=/boot/mac_override.link
After=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/mv /boot/mac_override.link /etc/systemd/network/00-default.link
ExecStartPost=/sbin/reboot
[Install]
WantedBy=multi-user.target
tomcat için şöyle yaparız.
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre
Environment=CATALINA_PID=/opt/tomcat9/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat9
Environment=CATALINA_BASE=/opt/tomcat9
Environment='CATALINA_OPTS=-Xms512M -Xmx4096M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
Environment=JPDA_ADDRESS=1144
ExecStart=/opt/tomcat9/bin/catalina.sh jpda start
ExecStop=/bin/kill -15 $MAINPID
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
ÖrnekEnvironment vermek için şöyle yaparız.
[Unit]
Description=WSO2EI
After=syslog.target
After=network.target
[Service]
Type=simple
WorkingDirectory=/usr/lib/wso2/wso2ei/6.4.0
User=root
Group=nogroup
Environment=JAVA_HOME=/usr/lib/wso2/wso2ei/6.4.0/jdk/jdk1.8.0_192
Environment=CARBON_HOME=/usr/lib/wso2/wso2ei/6.4.0
StandardOutput=syslog
StandardError=syslog
ExecStart=/usr/lib/wso2/wso2ei/6.4.0/bin/integrator.sh
ExecStop=/usr/lib/wso2/wso2ei/6.4.0/integrator.sh stop
#TimeoutSec=130
[Install]
WantedBy=multi-user.target
ÖrnekSadece sshd ve networkd servisini çalıştırmak için şöyle yaparız.
[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes
Restart SeçeneğiAçıklaması şöyle
Şöyle yaparızRestart= Configures whether the service shall be restarted when the service process exits, is killed, or a timeout is reached....
Restart=always
RestartSec=0
4 [Slice] BaşlığıŞöyle yaparız.
$ systemctl --user cat mozilla.slice
# /home/anthony/.config/systemd/user/mozilla.slice
[Unit]
Description=Slice for Mozilla apps
Before=slices.target
[Slice]
MemoryAccounting=yes
MemoryHigh=5G
MemoryMax=6G
$ systemd-run --user --slice mozilla.slice --scope -- /usr/bin/firefox &
$ systemd-run --user --slice mozilla.slice --scope -- /usr/bin/thunderbird &
Hiç yorum yok:
Yorum Gönder