mirror of
https://github.com/whyour/qinglong.git
synced 2026-10-16 22:35:32 +08:00
Preserve literal paths and arguments, use portable command options, validate startup configuration, and retain scripts when downloads fail. Ensure task watchdogs and process groups are cleaned up across Bash versions, with compatibility and process lifecycle regression coverage.
56 lines
1.6 KiB
Bash
Executable File
56 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
days=$1
|
|
|
|
remove_js_log() {
|
|
local log log_date log_timestamp diff_time log_path encoded_path result
|
|
local now
|
|
now=$(date +%s) || return $?
|
|
while IFS= read -r -d '' log; do
|
|
log_date=${log##*/}
|
|
log_date=${log_date:0:10}
|
|
if ! [[ $log_date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
|
|
if [[ $is_macos -eq 1 ]]; then
|
|
log_date=$(stat -f %Sm -t "%Y-%m-%d" "$log") || continue
|
|
else
|
|
log_date=$(stat -c %y "$log" | cut -d ' ' -f 1)
|
|
fi
|
|
fi
|
|
if [[ $is_macos -eq 1 ]]; then
|
|
# BSD date otherwise fills the omitted time from the current clock.
|
|
log_timestamp=$(date -j -f "%Y-%m-%d %H:%M:%S" "$log_date 00:00:00" +%s) || continue
|
|
else
|
|
log_timestamp=$(date +%s -d "$log_date") || continue
|
|
fi
|
|
diff_time=$((now - log_timestamp))
|
|
if [[ $diff_time -gt $((${days} * 86400)) ]]; then
|
|
log_path=${log#"$dir_log"/}
|
|
encoded_path=$(printf '%s' "$log_path" | jq -sRr @uri) || continue
|
|
result=$(find_cron_api "log_path=$encoded_path")
|
|
t '查询文件 %s' "$log_path"
|
|
if [[ -z $result ]]; then
|
|
t '删除中~'
|
|
rm -vf -- "$log"
|
|
else
|
|
t '正在被 %s 使用,跳过~' "$result"
|
|
fi
|
|
fi
|
|
done < <(find "$dir_log" -type f -name "*.log" -print0)
|
|
}
|
|
|
|
remove_empty_dir() {
|
|
local dir
|
|
for dir in "$dir_log"/*/ "$dir_log"/.[!.]*/ "$dir_log"/..?*/; do
|
|
[[ -d "$dir" ]] || continue
|
|
# rmdir also protects a directory populated between discovery and removal.
|
|
rmdir -- "$dir" 2>/dev/null || true
|
|
done
|
|
}
|
|
|
|
if [[ ${days} ]]; then
|
|
t '查找旧日志文件中...\n'
|
|
remove_js_log
|
|
remove_empty_dir
|
|
t '删除旧日志执行完毕\n'
|
|
fi
|