Cách chạy command linux ở chế độ backgroud

Làm sao để chạy command linux ở chế độ backgroud? Bạn thực hiện kết nối ssh và thực hiện command trên máy tính đó, nhưng bạn muốn command vẫn chạy khi bạn ngắt kết nối ssh? Bài viết này Lập trình không khó sẽ trình bày cách để giải quyết vấn đề này và một số vấn đề liên quan như theo dõi log, hay cách quản lý các command chạy trong backgroud.

Theo thống kê của StackOverFlow năm 2019 thì hệ điều hành Linux được hơn 53% lập trình viên sử dụng. Bạn có thể xem nhanh qua ảnh dưới đây.

Thống kê của SOF về hệ điều hành được sử dụng của lập trình viên
Thống kê của SOF về hệ điều hành được sử dụng của lập trình viên

Cách chạy command Linux ở chế độ backgroud

Giả sử bạn có một đoạn code python thực hiện một chức năng gì đó mà thời gian chạy rất lâu. Hay chẳng hạn như các api thì bạn cần để cho nó chạy không ngừng nghỉ. Khi đó, bạn sẽ cần chạy command này ở chế độ backgroud.

Cách chạy command linux ở chế độ backgroud
Cách chạy command linux ở chế độ backgroud

Giả sử tôi có một file autoscript.py sử dụng python để chạy, và bây giờ tôi muốn nó chạy dưới nền như đặt vấn đề phía trên. Bạn chỉ cần chạy như sau:

Khi bạn thực hiện dòng lệnh này, mặc định một file nohup.out sẽ được sinh ra. Toàn bộ các log sinh ra của script thay vì chạy trên màn hình thì sẽ được ghi lại vào file này. Để xem nội dung file thì bạn có thể sử dụng một trong các command dưới đây:

Với việc đọc log và sử dụng log sẽ giúp bạn kiểm soát command, code có sinh bug hay không. Chương trình của bạn có chạy ổn định và đúng như bạn mong muốn hay không. Do đó, cũng tùy trường hợp mà bạn có thể sử dụng command nào đó cho phù hợp.

Nếu trong trường hợp bạn không muốn ghi log, bạn có thể sửa lại command thành như sau:

Xem thêm giải thích về việc không tạo file log tự động tại đây

Hay nếu bạn một ghi log ra một file với tên tùy chỉnh, hãy sửa lại một chút:

Khi đó, log sẽ được ghi vào file có tên là autoscript.log thay vì mặc định.

Quản lý command linux chạy trong backgroud

Giả sử bạn chạy được command đó dưới backgroud rồi. Nhưng đôi khi bạn muốn kết thúc nó sớm hơn dự kiến. Hay đơn giản là bạn muốn kiểm tra xem nó có chạy bình thường hay xảy ra bug rồi mà lười đọc file log to đùng kia. Hoàn toàn có thể, chúng ta có thể kiểm tra command có chạy không? Và kể cả việc stop nó lại nữa.

Giả sử bạn muốn kiểm tra command chạy đoạn code “autoscript.py” phía trên đang chạy hay không, hay sử dụng command sau:

Nếu trong trường hợp chỉ có một tiến trình ở output như trên thì có nghĩa là tiến trình này đang không hoạt động. Có thể do lỗi nên chương trình đã bị kill, hoặc nó đã chạy xong.

Nếu có nhiều hơn 1 tiến trình trong kết quả thì chứng tỏ là nó đang chạy, tiến trình có chứa grep --color=auto -n không phải là tiến trình chạy, nó chính là tiến trình của command ps -aux | grep -n "autoscript.py" trong ví dụ trên.

Vậy làm sao để stop command đang chạy ở backgroud?

Cách để kill 1 tiến trình là:

Trong trường hợp bạn kiểm tra tiến trình đang hoạt động hay không thì output của nó sẽ có PID luôn, hiểu đơn giản PID là định danh của mỗi tiến trình.

Giả sử mình sửa đoạn code autoscript.py thành như sau:

Và mình sẽ chạy script này ở backgroud dùng nohup:

Bạn thấy đấy, mình kiểm tra thì thấy có 3 thằng đang thao tác với thằng này. Trong đó thằng đầu tiên là thằng gedit editer của ubuntu, mình đang dùng thằng này để sửa code mà quên chưa close. Thằng thứ 3 chính là kết quả của command ps -aux | grep -n "autoscript.py"

Ở các dòng kết quả phía trên, PID chính là cột thứ 2, chẳng hạn PID của autoscript.py đang chạy là 15814. Hãy kill nó xem:

Như vậy, nó đã bị stop bắt buộc bằng cách sử dụng lệnh kill.

Hi vọng bài chia sẻ mang lại cho bạn đọc những kiến thức bổ ích. Lập trình không khó xin chào và hẹn gặp lại 🙂

Similar Posts

Subscribe
Notify of
guest
0 Bình luận
Inline Feedbacks
View all comments