4.4 KiB
4.4 KiB
Untuk menambahkan error log pada service systemd, gunakan directive berikut di bagian [Service]:
StandardOutput=→ log output normalStandardError=→ log error- arahkan ke file dengan
append:ataufile:
Contoh lengkap:
[Unit]
Description=Aplikasi Pasar
[Service]
Type=simple
Restart=always
RestartSec=5s
User=root
WorkingDirectory=/home/api/
ExecStart=/home/api/delamonganpasarapi
# log output dan error ke file
StandardOutput=append:/var/log/delamonganpasarapi.log
StandardError=append:/var/log/delamonganpasarapi-error.log
# optional: buat identifier di journalctl
SyslogIdentifier=delamonganpasarapi
[Install]
WantedBy=multi-user.target
Buat file log dan set permission
Jalankan:
sudo touch /var/log/delamonganpasarapi.log
sudo touch /var/log/delamonganpasarapi-error.log
sudo chmod 644 /var/log/delamonganpasarapi*.log
Atau jika service jalan sebagai user tertentu:
sudo chown root:root /var/log/delamonganpasarapi*.log
Reload dan restart service
Setelah edit file service:
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart delamonganpasarapi
Cara melihat log
1. Dari file log
tail -f /var/log/delamonganpasarapi.log
tail -f /var/log/delamonganpasarapi-error.log
2. Dari journalctl (recommended)
journalctl -u delamonganpasarapi -f
atau
journalctl -u delamonganpasarapi -n 100
Best practice (recommended)
Sebenarnya systemd sudah menyimpan log otomatis, jadi cukup gunakan:
journalctl -u delamonganpasarapi
File log manual hanya diperlukan jika:
- ingin integrasi dengan logrotate
- ingin file log terpisah
- ingin dibaca aplikasi lain
Bonus: log rotation otomatis
Buat file:
sudo nano /etc/logrotate.d/delamonganpasarapi
isi:
/var/log/delamonganpasarapi*.log {
daily
rotate 14
compress
missingok
notifempty
copytruncate
}
Untuk user non root
Berikut contoh systemd service production-ready yang lebih aman, ada logging, restart policy, dan security hardening.
Misalnya file:
/etc/systemd/system/delamonganpasarapi.service
[Unit]
Description=Delamongan Pasar API Service
After=network.target
[Service]
Type=simple
# Jalankan dengan user khusus (BUKAN root)
User=api
Group=api
# folder kerja aplikasi
WorkingDirectory=/home/api
# jalankan binary
ExecStart=/home/api/delamonganpasarapi
# restart otomatis jika crash
Restart=always
RestartSec=5
# logging
StandardOutput=append:/var/log/delamonganpasarapi.log
StandardError=append:/var/log/delamonganpasarapi-error.log
SyslogIdentifier=delamonganpasarapi
# limit resource (optional tapi recommended)
LimitNOFILE=65535
# security hardening
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/home/api /var/log
# timeout
TimeoutStartSec=30
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
1. Buat user khusus (recommended)
Jangan pakai root.
sudo useradd -r -s /bin/false -d /home/api api
sudo chown -R api:api /home/api
2. Buat file log
sudo touch /var/log/delamonganpasarapi.log
sudo touch /var/log/delamonganpasarapi-error.log
sudo chown api:api /var/log/delamonganpasarapi*.log
3. Enable dan start service
sudo systemctl daemon-reload
sudo systemctl enable delamonganpasarapi
sudo systemctl start delamonganpasarapi
Cek status:
sudo systemctl status delamonganpasarapi
4. Monitor log realtime
File log:
tail -f /var/log/delamonganpasarapi.log
Error log:
tail -f /var/log/delamonganpasarapi-error.log
Atau journalctl:
journalctl -u delamonganpasarapi -f
5. Auto start saat boot
Sudah otomatis karena:
WantedBy=multi-user.target
dan
systemctl enable delamonganpasarapi
6. Bonus (SANGAT recommended): logrotate
sudo nano /etc/logrotate.d/delamonganpasarapi
isi:
/var/log/delamonganpasarapi*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
copytruncate
}
7. Struktur production yang ideal
/home/api/
├── delamonganpasarapi
├── config.json
└── .env
/var/log/
├── delamonganpasarapi.log
└── delamonganpasarapi-error.log
8. Debug cepat kalau service gagal
journalctl -u delamonganpasarapi -n 100 --no-pager
Kalau mau, saya bisa buatkan juga: