Không ai nhắc tôi "đã backup chưa" — nên tôi để một con cron làm việc đó mỗi đêm
Người làm một mình không có ai để hỏi câu này: "đã backup chưa?"
Trong một team thật, câu đó là một nghi thức. Có người review, có người bấm nút, có một con bot CI nhắc nếu bạn quên. Còn tôi — ngồi một mình trước cái terminal lúc nửa đêm, tay đặt trên một lệnh sắp xoá dữ liệu thật của khách — chẳng có ai cả. Chỉ có tôi và cái dấu nhắc đang nhấp nháy.
Đó là lý do tuần trước tôi làm hai việc tưởng rời nhau nhưng thật ra là một: tôi để một con cron tự sao lưu database mỗi đêm, rồi mới dám đụng vào việc dọn dẹp production.
Tấm bảo hiểm rẻ nhất tôi từng mua
Database của con bot — toàn bộ khách, hội thoại, hoá đơn, lịch hẹn — nằm trong một con Postgres chạy trên VPS. Nếu một đêm nào đó nó hỏng, hoặc tôi gõ nhầm một lệnh, thì không có "bản nháp" nào để quay về. Mất là mất thật.
Trước đây tôi backup bằng tay. Tức là: lâu lâu nhớ ra thì chạy một lệnh, kéo cái file về máy. "Lâu lâu nhớ ra" — bạn nghe cụm đó là biết nó nguy hiểm rồi. Bản backup gần nhất của tôi có khi đã ba tuần tuổi. Ba tuần dữ liệu khách thật, nếu mất, là không lấy lại được.
Nên tôi viết một script nhỏ, pg_backup.sh, và giao cho cron chạy 02:30 mỗi đêm. Nó làm đúng ba việc, không hơn:
- Dump nguyên con database ra một file nén
.sql.gz, đặt tên theo ngày giờ. - Kiểm cái file vừa tạo — nếu nó rỗng (0 byte) thì coi như lỗi, xoá đi và báo động, chứ không lặng lẽ giữ một bản backup chết.
- Dọn các bản cũ hơn 14 ngày, để ổ đĩa không phình mãi.
Vậy thôi. Không có hạ tầng hoành tráng, không có dịch vụ backup trả phí. Một file script, một dòng cron, và mỗi sáng thức dậy tôi đã có một bản chụp dữ liệu của đêm qua nằm sẵn.
Chi phí: gần như bằng không. Giá trị: cả sự nghiệp nhỏ này nếu một ngày nó cứu tôi. Đây là định nghĩa thật của "bảo hiểm rẻ".
Cái bẫy của backup tự động
Có một cái bẫy tôi cố tình tránh, và tôi nghĩ nó quan trọng hơn cả bản thân script.
Backup tự động dễ ru ngủ người ta. Bạn cài nó xong, thấy "à rồi, an toàn rồi", và không bao giờ kiểm lại. Đến ngày cần thì phát hiện ba tháng nay nó toàn ghi ra file rỗng vì database đổi mật khẩu, hoặc container đổi tên, hoặc ổ đĩa đầy. Một bản backup không bao giờ được kiểm là một bản backup bạn tưởng mình có.
Nên trong script, dòng tôi quan tâm nhất không phải dòng dump. Là dòng kiểm cái file vừa tạo có lớn hơn 0 byte không. Một bản backup không tự nó là an toàn — nó chỉ an toàn khi tôi biết chắc nó mở ra được. Lần cài đặt, tôi chạy thử một phát bằng tay, mở file ra xem, rồi mới giao cho cron lo phần còn lại.
Bài học cũ của nghề ops, mà người làm một mình hay quên: backup mà chưa từng phục hồi thử thì chưa phải backup. Nó chỉ là một file bạn hy vọng.
Và rồi tôi phải xoá thật
Đúng cái tuần dựng xong con cron đó, tôi đụng một việc khiến tôi mừng vì đã có nó.
Production của tôi đang gánh dữ liệu của vài client cũ — những spa từng thử bot rồi không đi tiếp. Dữ liệu của họ vẫn nằm đó, làm database nặng thêm, làm mỗi lần tôi nhìn vào số liệu lại phải lọc bỏ nhiễu. Tôi quyết định dọn: chỉ giữ hai khách đang chạy thật — TA Beauty và Hiền Beauty — và xoá 5 client cũ.
Xoá dữ liệu ở production là loại việc làm tim đập nhanh. Vì lệnh xoá thì không có nút "undo". Gõ xong, Enter xong, là xong. Nếu tôi lỡ tay lọc nhầm điều kiện, hoặc xoá nhầm một khách đang sống vì hai cái tên gần giống nhau — thì khách thật của tôi mất sạch lịch sử hội thoại giữa lúc họ đang dùng.
Nên tôi làm đúng một thứ trước khi đụng vào lệnh xoá: tôi chạy backup ngay tại chỗ. Không đợi con cron 02:30. Tôi ép một bản chụp tươi, kiểm nó mở được, rồi mới gõ lệnh dọn.
Đó là cái luật cứng tôi rút ra và sẽ không bao giờ phá: luôn backup ngay trước khi xoá bất cứ thứ gì ở production — kể cả khi đêm qua đã có bản tự động. Vì bản tự động là của hôm qua. Cái tôi sắp đụng vào là dữ liệu của bây giờ. Khoảng cách giữa hai thời điểm đó chính là chỗ một người làm một mình hay chết.
Vì sao chuyện này hợp với người làm một mình
Khi bạn có team, kỷ luật đến từ người khác — quy trình, review, ánh mắt của đồng đội. Khi bạn làm một mình, kỷ luật phải đến từ máy móc bạn tự dựng. Bạn không thể trông cậy vào "tôi sẽ nhớ", vì sẽ có đêm bạn mệt, bạn vội, bạn tự tin quá mức — và đúng đêm đó là đêm bạn gõ nhầm.
Con cron chạy 02:30 không bao giờ mệt. Nó không vội, không tự tin thái quá, không quên. Tôi giao cho nó cái phần mà bản thân tôi không đáng tin: sự đều đặn.
Và cái luật "backup trước khi xoá" — tôi không tin vào việc mình sẽ luôn nhớ nó. Nên tôi viết nó ra, kể nó ở đây, biến nó thành một câu thần chú để lần sau tay tôi tự dừng lại trước phím Enter.
Ship một mình không phải là làm mọi thứ bằng cơ bắp. Là biết chỗ nào mình yếu — trí nhớ, sự cẩn thận lúc nửa đêm — rồi dựng một cái máy nhỏ đứng gác chỗ đó cho mình.
👉 Muốn tự tay build một con bot AI chạy thật rồi học luôn cách vận hành nó như một người làm một mình — backup, dọn dữ liệu, đừng làm sập production? Bắt đầu với mini-course miễn phí: Bot AI đầu tiên của bạn — làm xong trong một buổi tối, và bạn sẽ có một sản phẩm thật để bắt đầu nghĩ như một người vận hành, không chỉ một người viết code.