Làm thế nào để viết thành nhiều dòng - i9bet

/imgposts/pnfs32r3.jpg

Gần đây, tôi luôn bận rộn với việc viết tài liệu API, sử dụng dịch vụ tài liệu dựa trên swaggo. Vì cần phối hợp với đội ngũ frontend, nên mỗi ngày tôi phải cập nhật tài liệu API liên tục, điều này khá phiền phức. Trước đây, quy trình của tôi chỉ ở mức bán tự động:

  1. Sử dụng makefile để copy chương trình tài liệu lên server.
  2. Đăng nhập thủ công vào server và chạy lại dịch vụ bằng cách dùng makefile để reload hệ thống tài liệu (dịch vụ tài liệu được xây dựng dựa trên golang gin, vì vậy cần khởi động lại dịch vụ).

Mới đây, khi xem xét Makefile của một dự án mã nguồn mở, tôi phát hiện ra rằng có thể sử dụng lệnh ssh để thực thi các lệnh từ xa. Điều này giúp tôi không cần phải đăng nhập thủ công vào server để thao tác, thật tuyệt vời!

.PHONY: tai-lieu
tai-lieu:
  swag init --output api_tai_lieu --tags "Ứng dụng di động WeChat, Quản lý thiết bị" --parseDependency --parseInternal --parseGoList=false --parseDepth=1
  cd api_tai_lieu/ && go build
  
.PHONY: trien-khai-tai-lieu
trien-khai-tai-lieu:
  make tai-lieu
  scp api_tai_lieu/api_tai_lieu nguoi_dung@dia_chi_may_chu:~/du_an/api_tai_lieu/api_tai_lieu2
  ssh nguoi_dung@dia_chi_may_chu 'cd ~/du_an && make tai-lieu'

.PHONY: tai-lieu-lai
tai-lieu-lai:
  sudo systemctl stop go_tai_lieu
  sleep 1
  cp api_tai_lieu/api_tai_lieu2 api_tai_lieu/api_tai_lieu
  sudo systemctl start go_tai_lieu
  sleep 1
  sudo systemctl status go_tai_lieu

Như vậy, giờ đây tôi có thể triển khai và khởi động lại dịch vụ chỉ với một dòng lệnh:

make trien-khai-tai-lieu

Đối với những tình huống phức tạp hơn, chẳng hạn như kiểm tra sự tồn tại của thư mục, tự động sao lưu trước khi thay thế, i9bet chúng ta sẽ cần nhiều đoạn mã shell hơn. Làm xèng thế nào để viết thành nhiều dòng?

Do không nhớ rõ cú pháp của shell, tôi đã nhờ đến trợ lý ChatGPT:

Có thể thực hiện giải nén và chạy nhiều lệnh ssh từ xa bằng cách viết thành nhiều dòng không? Tôi cảm thấy mình gần như đã trở thành chuyên gia về Linux Shell rồi! 😄

ssh nguoi_dung@dia_chi_may_chu '
tar -zxvf /duong_dan_den/tap_tin.tar.gz -C /duong_dan_tren_host_va_remote && \
lenh1 && \
lenh2 && \
lenh3
'