Vấn đề của bạn nằm ở quyền truy cập tệp [hoặc hệ thống tệp chỉ đọc]. Việc đặt trước sudo
vào lệnh của bạn không thể khắc phục điều này, bởi vì chỉ nohup dotnet application.dll
được thực thi với quyền root bởi sudo
, việc chuyển hướng đầu ra được thực hiện bằng cách bash với các đặc quyền người dùng thông thường của bạn. Bạn có thể giải quyết vấn đề này bằng cách gọi một shell riêng với quyền root
Đối với cả Attempt1 và Attempt2 , quá trình chuyển hướng sẽ ghi lại kết quả đầu ra một cách chính xác vào tệp đầu ra. Nhưng tôi gặp lỗi "bỏ qua đầu vào và chuyển hướng thiết bị xuất chuẩn sang thiết bị xuất chuẩn" trong trình bao ngay sau khi lệnh nohup được ban hành
Tôi đã thử Attempt3 với 2>&1. Cái này cũng được ghi vào tệp đầu ra. Lần này tôi không gặp lỗi "bỏ qua đầu vào và chuyển hướng thiết bị xuất chuẩn sang thiết bị xuất chuẩn". Nhưng tôi đã nhận được "nohup. bỏ qua đầu vào" là dòng đầu tiên trong nhật ký lỗi
Làm cách nào tôi có thể chuyển hướng tệp đầu ra Nohup không gặp lỗi?
Tôi đang tạo một tài liệu chính thức nêu chi tiết các bước cho một hoạt động quan trọng. Mặc dù các cách thực thi dưới đây hoạt động tốt, nhưng tôi muốn loại bỏ những lỗi khó hiểu đó. Bất kỳ ý tưởng làm thế nào tôi có thể thoát khỏi những lỗi đó?
Theo mặc định, tất cả các quy trình Linux chạy trên nền trước của thiết bị đầu cuối. Nhưng khi bạn đóng thiết bị đầu cuối và thoát phiên, tất cả các quy trình đó sẽ bị trình bao giết. Đôi khi bạn có thể cần chạy một số quy trình và tác vụ trong nền trong Linux. Nohup [viết tắt của No Hangup] là lệnh để chạy một quy trình và bỏ qua tín hiệu hủy do người dùng hoặc thiết bị đầu cuối gửi, cho dù đó là lệnh, phần mềm hay tập lệnh. Khi bạn chạy một quy trình bằng Nohup, quy trình sẽ tiếp tục chạy ngay cả khi bạn đóng thiết bị đầu cuối hoặc kết thúc phiên. Vì vậy, đôi khi bạn có thể cần xem đầu ra và thông báo lỗi của các quy trình Nohup. Trong những trường hợp như vậy, bạn có thể chuyển hướng đầu ra của Nohup sang tệp. Trong bài viết này, chúng ta sẽ xem xét cách chuyển hướng đầu ra Nohup sang tệp
Cách chuyển hướng đầu ra của Nohup sang tệp
Đây là cú pháp cơ bản cho lệnh Nohup
nohup [command] [ARGS]
Đây là một ví dụ để chạy tập lệnh trong nền
$ nohup /home/ubuntu/test.sh nohup: ignoring input and appending output to nohup.out
Xin lưu ý, trong ví dụ trên, tập lệnh của chúng tôi sẽ tiếp tục chạy ở nền trước, ngay cả khi bạn đóng thiết bị đầu cuối hoặc kết thúc phiên. Nếu bạn muốn chạy nó ở chế độ nền, bạn cần thêm toán tử dấu và '&' sau lệnh
$ nohup /home/ubuntu/test.sh &
Theo mặc định, lệnh Nohup sẽ gửi đầu ra của các lệnh tới Nohup. out tập tin trong thư mục làm việc hiện tại của bạn. Bạn có thể xem nội dung của nó trong bất kỳ trình chỉnh sửa tệp nào
$ sudo cat nohup.out
Nếu bạn muốn chuyển hướng đầu ra của lệnh Nohup sang tệp, chỉ cần thêm nó vào cuối lệnh sau > toán tử chuyển hướng. Đây là một ví dụ
$ sudo nohup /home/ubuntu/test.sh > /home/ubuntu/data.txt nohup: ignoring input and redirecting stderr to stdout
Trong trường hợp này, đầu ra của shell script sẽ được gửi tới /home/ubuntu/data. tập tin txt
Nếu bạn muốn gửi một quy trình Nohup ở chế độ nền nhưng cũng chuyển hướng đầu ra của nó sang tệp, bạn chỉ cần thêm dấu và sau tên tệp mà bạn đang gửi đầu ra Nohup, như minh họa bên dưới
$ sudo nohup /home/ubuntu/test.sh > /home/ubuntu/data.txt &
Nếu bạn cũng muốn gửi đầu ra tiêu chuẩn và lỗi tới tệp, hãy thêm bộ mô tả tệp 1 và 2 như hình bên dưới
$ sudo nohup /home/ubuntu/test.sh > /home/ubuntu/data.txt 2>&1 &
Trong ví dụ trên, tập lệnh shell sẽ được gửi để chạy ở chế độ nền, đầu ra, đầu ra tiêu chuẩn và thông báo tiêu chuẩn của nó sẽ được gửi tới /home/ubuntu/data. txt
Nếu bạn không muốn ghi lại bất kỳ đầu ra Nohup nào, thì chỉ cần chuyển hướng mọi thứ đến /dev/null
$ sudo nohup /home/ubuntu/test.sh > /dev/null 2>&1 &
Trong bài viết này, chúng tôi đã xem xét cách chuyển hướng đầu ra của Nohup sang tệp. Xin lưu ý, lệnh Nohup chỉ tiếp tục chạy quy trình ngay cả sau khi bạn đóng thiết bị đầu cuối hoặc phiên. Nó không gửi quá trình đến nền. Để làm được điều đó, bạn cần thêm toán tử dấu và ở cuối lệnh