Chạy tự động NodeJs App với Systemd trên Raspberry Pi
Systemd là một hệ thống khởi động được tích hợp trong nhiều bản phân phối Linux khác nhau. Hướng dẫn này sẽ chỉ cho bạn cách sử dụng systemd
để khởi động ứng dụng của bạn một cách tự động khi máy tính nhúng như Raspberry Pi được khởi động.
1. Thiết lập user và thư mục chứa app
Bạn có thể bỏ qua bước này nếu bạn đã có NodeJs app chạy trên hệ thống. Tuy nhiên, vẫn cần xác định xem thư mục chứa app được sở hữu bởi user nào, group nào. Trong ví dụ dưới, bạn sẽ cần thay /PATH/TO/YOUR/APP/
thành đường dẫn đến thư mục chứa app của bạn. Ví dụ cũng add user được tạo vào group có phân quyền cao nhất thuộc hệ thống là sudo
.
# Tạo user mới với tên: node
adduser node
# Thêm user này vào group: sudo
usermod -aG sudo node
# Tạo thư mục chứa app được sở hữu bởi user trên tại đường dẫn bạn muốn
mkdir -p /PATH/TO/YOUR/APP/
chown -R node:node /PATH/TO/YOUR/APP/
2. Tạo tệp .service
Để sử dụng systemd
, bạn cần tạo một tệp mới trong thư mục /etc/systemd/system
với với đuôi .service
ví dụ yourapp.service
. Bên trong tệp đó, bạn có thể sử dụng mẫu bên dưới.
Bạn nên thay thế mọi thứ được viết bằng chữ hoa như YOUR_SERVICE_DESC
, YOUR_SERVICE_DOC
, /PATH/TO/YOUR/NODE/
, /PATH/TO/YOUR/APP/
, YOUR_OPEN_PORT
, YOUR_SYSTEM_USER
, YOUR_SYSTEM_USER_GROUP
hay YOUR_APP
bằng các giá trị của riêng bạn, ngoại trừ NODE_PORT
. Để tìm chính xác /PATH/TO/YOUR/NODE/
, bạn có thể dùng lệnh which node
trong Terminal. Nếu bạn không chắc mình đã cài NodeJs hay chưa thì có thể kiểm tra lại bằng lệnh node --version
. YOUR_SYSTEM_USER
, YOUR_SYSTEM_USER_GROUP
là user và group tồn tại sẵn trên máy của bạn. Hoặc bạn có thể tạo user và group mới trước với lệnh
YourService.service Template
[Unit]
Description=YOUR_SERVICE_DESC
Documentation=YOUR_SERVICE_DOC
After=network.target
[Service]
ExecStart=/PATH/TO/YOUR/NODE/ --use_strict /PATH/TO/YOUR/APP/
Restart=always
Environment=NODE_PORT=YOUR_OPEN_PORT
User=YOUR_SYSTEM_USER
Group=YOUR_SYSTEM_USER_GROUP
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=YOUR_APP
[Install]
WantedBy=multi-user.target
Ví dụ
[Unit]
Description=express.js
Documentation=https://makexyz.ddns.net
After=network.target
[Service]
ExecStart=/usr/local/bin/node /home/dietpi/Desktop/Projects/MyNodeLibs/packages/h5p-examples/build/express.js
Restart=always
Environment=NODE_PORT=8080
Type=simple
User=node
Group=node
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
3. Chạy tệp .service với systemctl
Khi bạn đã tạo xong tập lệnh systemd
, giờ đây bạn có thể sử dụng lệnh systemctl
để start
, stop
hoặc restart
ứng dụng của mình.
systemctl start yourapp.service
systemctl stop yourapp.service
systemctl restart yourapp.service
Khi bạn đã chạy lệnh start
, ứng dụng của bạn sẽ tiếp tục reboot
nếu có tiến trình bị lỗi cho đến khi bạn chạy lệnh stop
.
Nếu muốn ứng dụng tự động được khởi chạy mỗi khi máy tính khởi động, bạn có thể sử dụng lệnh dưới.
systemctl enable yourapp.service
Nếu bạn vừa cập nhật lại một file .service
thì nhớ dùng lệnh dưới để restart lại daemon, nó giúp daemon biết được đã có sự thay đổi.
sudo systemctl daemon-reload
Chúc bạn thành công với hướng dẫn trên. Mình hy vọng hướng dẫn này hữu ích với bạn, nhất là các bạn đang muốn chạy NodeJs App trên máy tính nhúng như Raspberry Pi và cần nó luôn được khởi động bất kỳ khi nào máy tính khởi động lại.
Máy tính nhúng chạy Linux Raspberry Pi
Tài liệu tham khảo