[Unit] Description=Box After=mysql.service nginx.service ; As cloudron-resize-fs is a one-shot, the Wants= automatically ensures that the service *finishes* Wants=cloudron-resize-fs.service [Install] WantedBy=multi-user.target [Service] Type=idle WorkingDirectory=/home/yellowtent/box User=yellowtent Group=yellowtent Restart=always ExecStart=/home/yellowtent/box/box.js ExecReload=/bin/kill -HUP $MAINPID ; we run commands like df which will parse properly only with correct locale Environment="HOME=/home/yellowtent" "USER=yellowtent" "BOX_ENV=cloudron" "NODE_ENV=production" "LC_ALL=C" ; this sends the main process SIGTERM and then if anything lingers to the control-group . this is also the case if the main process crashes. ; the box code handles SIGTERM and cleanups the tasks KillMode=mixed KillSignal=SIGTERM TimeoutStopSec=5s SendSIGKILL=yes ; Do not kill this process on OOM. Children inherit this score. Do not set it to -1000 so that MemoryMax can keep working OOMScoreAdjust=-999 MemoryMax=400M StartLimitInterval=1 StartLimitBurst=60