Tôi đã đọc các trang về lõi người dùng và ngày tháng của người dùng cũng như bốn trang web chất lượng về các kết xuất cốt lõi của chủ đề. Tôi đã nghiên cứu và thực hành tạo các bãi chứa lõi được bốn ngày rồi.
Câu hỏi được nêu rõ trong tiêu đề của bài đăng này.
Lưu ý: khi tôi đề cập đến 'lõi', tôi cũng đang đề cập đến tham số kernel kernel.core_potype và sẽ gọi nó là một biến môi trường. Tôi gọi nó là biến môi trường vì nó hoạt động như một biến môi trường trên phạm vi toàn cầu. Tôi sử dụng các thuật ngữ này thay thế cho nhau.
lõi mô tả trong trang hướng dẫn cách đặt môi trường này có thể thay đổi thành
phù hợp với một mẫu. Mẫu cung cấp một 'công cụ xác định thời gian' %t
cung cấp
đến mẫu thời gian hiện tại ở định dạng unix, giây kể từ kỷ nguyên.
Theo nguyên tắc cốt lõi, tập lệnh này tiếp theo là một mẫu có thể áp dụng:
lõi.%e.%t
%e là tên tập tin thực thi
%t là thời gian kết xuất, được biểu thị bằng giây kể từ Kỷ nguyên
core là tên của tập tin. Nó có thể là cốt lõi hoặc bất kỳ tên nào bạn đặt cho nó.
Lưu ý: có thể có một đường dẫn đến nơi bạn muốn đặt tệp; nhưng, tôi sẽ ghi vào thư mục làm việc hiện tại; và, tôi sẽ làm cho việc đọc kịch bản ở đây trở nên đơn giản, vì vậy tôi bỏ qua đường dẫn.
Chúng ta có thể đặt biến môi trường như thế này:
Sudo sysctl -w kernel.core_pattern=core.%e.%t
Bây giờ, tôi yêu cầu ngày ở định dạng ngày có hai chữ số năm hai chữ số tháng hai chữ số, chẳng hạn như 220224.Vấn đề là xác định thời gian %t
của lõi cung cấp thời gian tính bằng giây kể từ kỷ nguyên, không thân thiện lắm với con người!
Tôi cũng yêu cầu ngày đó trở thành ngày mới nhất khi thực thi tập lệnh. Trình xác định thời gian %t
của lõi sẽ làm điều này; nhưng,
kết quả là tên của tệp được đọc với dấu thời gian unix, không thân thiện với con người lắm!
Ngược lại, nếu tôi thay thế một tập lệnh ở vị trí của trình xác định thời gian của lõi trong khi đặt biến môi trường kernel.core_potype thì mẫu đặt tên của lõi sẽ luôn được ghi với ngày được ghi vào thời điểm mẫu được tạo chứ không phải thời gian thực của lõi- bãi rác.
Tiếp theo là kịch bản mà tôi đã tạo ra để làm điều này. Tôi vừa thay thế bộ xác định thời gian chính trong mẫu bằng đoạn trích được cung cấp tại đây:
ngày -d "-8 giờ" +%y%m%d
Nhưng hãy nhớ rằng nếu tôi sử dụng tập lệnh thay cho bộ xác định thời gian của lõi thì thời gian được đặt trong mẫu sẽ bị mã hóa cứng và sẽ không chính xác vào lần tới khi tôi phải thực hiện kết xuất lõi.
kịch bản của tôi trông như thế này:
sudo sysctl -w kernel.core_potype=core.%e.`date -d "-8 giờ" +%y%m%d`; ~/test.out
Các ~/test.out
một phần của tập lệnh đó chạy tệp thử nghiệm mà tôi đang sử dụng để tìm hiểu cách khắc phục sự cố cài đặt linux.
Tập lệnh của tôi đặt biến môi trường ngay trước khi gọi tập lệnh thử nghiệm. Lợi ích của việc này là tệp kết xuất lõi được đặt tên giống như tên gọi của tập lệnh thử nghiệm; và, điều này mang lại cho tệp kết xuất lõi một tên có ý nghĩa.
Kịch bản của tôi hoạt động; tuy nhiên, mỗi khi tôi cần kéo một kết xuất lõi, tôi phải nhớ kèm theo lệnh gọi đến tập lệnh thử nghiệm với tập lệnh của mình. Nếu tôi không kết hợp phép gán cho biến môi trường với lệnh gọi tập lệnh kiểm tra, ngày được ghi vào tệp kết xuất lõi sẽ trở thành bất kỳ thứ gì nó được đặt thành lần cuối gán cho biến môi trường được đặt, không chính xác lắm.
Tôi muốn viết lại tập lệnh của mình để tận dụng tối đa ngày được viết ở định dạng con người có thể đọc được cũng như ngày được viết vào thời điểm xảy ra kết xuất lõi. Tôi đã thử!
Một vấn đề tôi gặp phải phát sinh do lệnh ngày sử dụng mã thông báo kiểm soát định dạng giống nhau %t
cũng như mã thông báo xác định mẫu lõi %t
Đây là một thử nghiệm để xác nhận xung đột của bộ xác định thời gian lõi và kiểm soát định dạng của lệnh ngày:
mã thông báo này có nghĩa là từ bộ xác định thời gian cốt lõi
sudo sysctl -w kernel.core_potype=core.%e.`date -d@%t +%y%m%d`; ~/test.out
Điều này đưa ra thông báo "ngày: ngày không hợp lệ â@%tâ"
Bạn có thấy chúng ta không thể chỉ đặt bộ xác định thời gian cốt lõi vào vị trí thời gian của tập lệnh ngày.
Đây là một thử nghiệm để xác nhận tập lệnh hoạt động khi được sử dụng như dự kiến:
Đây là dấu thời gian kỷ nguyên Unix
sudo sysctl -w kernel.core_potype=core.%e.`date -d@1645337785 +%y%m%d`; ~/test.out
Điều này hoạt động như mong đợi ngoại trừ ngày không đổi.
Bạn có thấy dấu thời gian unix thực sự có thể thay thế vị trí thời gian của tập lệnh ngày không.
Có thể có một cách khác để làm điều này; nhưng tôi không biết. Tôi đang hỏi liệu có ai trong số các bạn thấy cách giải quyết vấn đề này không.
Cảm ơn bạn vì thời gian qua.