Gitlab

Création d'un service

Instancier un service

Contrairement à PHP dont le service tourne nativement sur le serveur, lorsque l’application utlilise un runtime spécficique (pour les applications Nodejs, Python, Ruby …) et doit être lancée sur le serveur, les dévelopeurs ont accès à Systemd au niveau utilisateur et peuvent donc gérer eux-mêmes les actions sur le service et son évolution:

  • Créer un service et le versionner dans le projet my-super-project/systemd/my-super-service.service :

    [Unit]
    Description=My super service for my super project
    
    [Service]
    ExecStart=~/root/start-server.sh
    Restart=always
    RestartSec=180
    StandardOutput=append:/var/www/my-super-project/log/out.log
    StandardError=append:/var/www/my-super-project/log/err.log
    
    [Install]
    WantedBy=default.target
    
  • Créer un script “post-deploy” et le versionner dans le dossier .deploy.d du projet (my-super-project/.deploy.d/022-install-service):

    #! /bin/bash
    
    # install service
    mkdir -p ~/.config/systemd/user/
    cp ~/root/systemd/my-super-service.service ~/.config/systemd/user/my-super-service.service
    # prepare log path
    mkdir -p /var/www/my-super-project/log/
    # run service
    systemctl --user daemon-reload
    systemctl --user restart my-super-service
    

Tâches planifiées

On peut déployer ses tâches planifiées via un timer systemd (voir au dessus) ou une classique crontab versionnée dans votre dépôt:

  • Définir la tâche qui lancera le cronjob dans my-super-project/crontab
0 * * * * /bin/bash $HOME/root/hourly-script
  • Créer un script “post-deploy” pour installer le cronjob my-super-project/.deploy.d/033-install-cron:
#! /bin/bash
crontab ~/root/crontab
Top