Skip to content

Commit ba9b096

Browse files
authored
Improve existing core_cleanup.py to clean old dump/kernel dump. (#21532)
Improve existing core_cleanup.py to clean old dump/kernel dump. #### Why I did it On small disk device, dump file will cause disk full issue. #### How I did it Delete expired dump files Only keep 4 kernel dump files. #### How to verify it Pass all UT. Add new UT to cover this script. Manually verified: admin@vlab-01:~$ sudo ls /var/dump/ sonic_dump_bjw-can-7260-8_20230125_030042.tar.gz sonic_dump_bjw-can-7260-8_20250125_030043.tar.gz sonic_dump_bjw-can-7260-8_20250125_030045.tar.gz sonic_dump_bjw-can-7260-8_20250125_030042.tar.gz sonic_dump_bjw-can-7260-8_20250125_030044.tar.gz sonic_dump_bjw-can-7260-8_20250125_030046.tar.gz admin@vlab-01:~$ sudo ls /var/core/ orchagent.1644957238.46.core.gz orchagent.1944957232.46.core.gz orchagent.1944957234.46.core.gz orchagent.1944957236.46.core.gz orchagent.1944957231.46.core.gz orchagent.1944957233.46.core.gz orchagent.1944957235.46.core.gz admin@vlab-01:~$ sudo python3 ./core_cleanup.py admin@vlab-01:~$ sudo ls /var/dump/ sonic_dump_bjw-can-7260-8_20250125_030043.tar.gz sonic_dump_bjw-can-7260-8_20250125_030045.tar.gz sonic_dump_bjw-can-7260-8_20250125_030044.tar.gz sonic_dump_bjw-can-7260-8_20250125_030046.tar.gz admin@vlab-01:~$ sudo ls /var/core/ orchagent.1944957233.46.core.gz orchagent.1944957234.46.core.gz orchagent.1944957235.46.core.gz orchagent.1944957236.46.core.gz #### Description for the changelog Improve existing core_cleanup.py to clean old dump/kernel dump.
1 parent 01518cd commit ba9b096

File tree

1 file changed

+38
-5
lines changed

1 file changed

+38
-5
lines changed

files/scripts/core_cleanup.py

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
11
#!/usr/bin/env python3
22

33
import os
4+
import re
45
from collections import defaultdict
5-
from datetime import datetime
6+
from datetime import datetime, date, timedelta
67

78
from sonic_py_common.logger import Logger
89

910
SYSLOG_IDENTIFIER = 'core_cleanup.py'
1011
CORE_FILE_DIR = '/var/core/'
12+
KERNEL_DUMP_DIR = '/var/dump/'
1113
MAX_CORE_FILES = 4
1214

15+
def delete_file(file_path):
16+
try:
17+
os.remove(file_path)
18+
except e:
19+
logger.log_error('Unexpected error: {} occured trying to delete {}'.format(e, file_path))
20+
21+
def get_dump_timestamp(file_name):
22+
match = re.search(r'sonic_dump_.*_(\d\d\d\d)(\d\d)(\d\d)_(\d\d)(\d\d)(\d\d).tar.gz', file_name)
23+
if match:
24+
groups = match.groups()
25+
return datetime(int(groups[0]), int(groups[1]), int(groups[2]), int(groups[3]), int(groups[4]), int(groups[5]))
26+
27+
return None
1328

1429
def main():
1530
logger = Logger(SYSLOG_IDENTIFIER)
@@ -32,14 +47,32 @@ def main():
3247
curr_files.sort(reverse=True, key=lambda x: datetime.utcfromtimestamp(int(x.split('.')[1])))
3348
oldest_core = curr_files[MAX_CORE_FILES]
3449
logger.log_info('Deleting {}'.format(oldest_core))
35-
try:
36-
os.remove(os.path.join(CORE_FILE_DIR, oldest_core))
37-
except:
38-
logger.log_error('Unexpected error occured trying to delete {}'.format(oldest_core))
50+
delete_file(os.path.join(CORE_FILE_DIR, oldest_core))
3951
core_files_by_process[process] = curr_files[0:MAX_CORE_FILES]
4052

4153
logger.log_info('Finished cleaning up core files')
4254

55+
# cleanup kernel dumps
56+
logger.log_info('Cleaning up kernel dump files')
57+
kernel_dumps = [f for f in os.listdir(KERNEL_DUMP_DIR) if os.path.isfile(os.path.join(KERNEL_DUMP_DIR, f))]
58+
# Sort kernel dumps from new to old
59+
kernel_dumps.sort(reverse = True, key = lambda x: get_dump_timestamp(x))
60+
not_expired_dumps = []
61+
for kernel_dump in kernel_dumps:
62+
# delete expired kernel dump
63+
dump_date = get_dump_timestamp(kernel_dump)
64+
if not dump_date:
65+
# Not a kernel dump file
66+
continue
67+
68+
# Only keep recent MAX_CORE_FILES kernel dumps
69+
if len(not_expired_dumps) < MAX_CORE_FILES:
70+
not_expired_dumps.append(kernel_dump)
71+
else:
72+
logger.log_info('Deleting {}'.format(kernel_dump))
73+
delete_file(os.path.join(KERNEL_DUMP_DIR, kernel_dump))
74+
75+
logger.log_info('Finished cleaning up kernel dump files')
4376

4477
if __name__ == '__main__':
4578
main()

0 commit comments

Comments
 (0)