Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
centos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
platyhouse
centos
Commits
5f6f6f5b
Commit
5f6f6f5b
authored
Feb 02, 2025
by
platyhouse
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added pty_storyshare_check_old_app.php
parent
9274d990
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
181 additions
and
3 deletions
+181
-3
pty_check_folder_last_time.php
pty_check_folder_last_time.php
+1
-0
pty_check_unused.php
pty_check_unused.php
+0
-0
pty_storyshare_archive_mysql_folder.php
pty_storyshare_archive_mysql_folder.php
+6
-3
pty_storyshare_check_old_app.php
pty_storyshare_check_old_app.php
+174
-0
No files found.
pty_check_folder_last_time.php
View file @
5f6f6f5b
#!/usr/bin/php
<?php
<?php
// CLI에서 폴더 경로 입력 받기
// CLI에서 폴더 경로 입력 받기
...
...
pty_check_unused.php
100644 → 100755
View file @
5f6f6f5b
File mode changed from 100644 to 100755
pty_
archive
.php
→
pty_
storyshare_archive_mysql_folder
.php
100644 → 100755
View file @
5f6f6f5b
#!/usr/bin/php
<?php
<?php
// CLI로 실행해야 하므로 PHP SAPI 확인
// CLI로 실행해야 하므로 PHP SAPI 확인
...
@@ -13,8 +14,9 @@ if ($argc < 2) {
...
@@ -13,8 +14,9 @@ if ($argc < 2) {
$date
=
date
(
"Ymd_His"
);
$date
=
date
(
"Ymd_His"
);
$databaseName
=
$argv
[
1
];
$databaseName
=
$argv
[
1
];
$backupDir
=
"
$databaseName
"
;
$backupDir
=
"
$databaseName
"
;
$dumpFile
=
"
$databaseName
/
{
$databaseName
}
_
{
$date
}
.sql"
;
$dumpFileTgz
=
"./
{
$databaseName
}
_
{
$date
}
_sql.tgz"
;
$zipFile
=
__DIR__
.
"/
{
$databaseName
}
_
{
$date
}
.tgz"
;
$dumpFile
=
"./
{
$databaseName
}
_
{
$date
}
.sql"
;
$zipFile
=
"./
{
$databaseName
}
_
{
$date
}
_www.tgz"
;
// MySQL 설정 (환경에 맞게 수정)
// MySQL 설정 (환경에 맞게 수정)
$mysqlHost
=
'localhost'
;
$mysqlHost
=
'localhost'
;
...
@@ -41,12 +43,13 @@ exec($dumpCommand, $output, $resultCode);
...
@@ -41,12 +43,13 @@ exec($dumpCommand, $output, $resultCode);
if
(
$resultCode
!==
0
)
{
if
(
$resultCode
!==
0
)
{
exit
(
"MySQL 덤프 실패:
$dumpCommand
\n
"
);
exit
(
"MySQL 덤프 실패:
$dumpCommand
\n
"
);
}
}
exec
(
"tar cvzf
$dumpFileTgz
$dumpFile
"
);
echo
"MySQL 덤프 생성 완료:
$dumpFile
\n
"
;
echo
"MySQL 덤프 생성 완료:
$dumpFile
\n
"
;
// 폴더 압축
// 폴더 압축
echo
"폴더 압축 중...
\n
"
;
echo
"폴더 압축 중...
\n
"
;
$zipCommand
=
sprintf
(
$zipCommand
=
sprintf
(
'tar cvzf %s %s'
,
'tar cvzf %s %s
--warning=no-file-changed --ignore-failed-read
'
,
escapeshellarg
(
$zipFile
),
escapeshellarg
(
$zipFile
),
escapeshellarg
(
$backupDir
)
escapeshellarg
(
$backupDir
)
);
);
...
...
pty_storyshare_check_old_app.php
0 → 100755
View file @
5f6f6f5b
#!/usr/bin/php
<?php
// CLI에서 실행하는 경우 인자로 MySQL 비밀번호를 받도록 처리
if
(
php_sapi_name
()
===
"cli"
)
{
if
(
$argc
<
2
)
{
die
(
"❌ 사용법: php "
.
$argv
[
0
]
.
" <MySQL 비밀번호>
\n
"
);
}
$pass
=
$argv
[
1
];
// 인자로 받은 MySQL 비밀번호
}
else
{
die
(
"❌ 이 스크립트는 CLI에서만 실행할 수 있습니다.
\n
"
);
}
$host
=
"localhost"
;
$user
=
"root"
;
// 현재 날짜에서 2달 전 날짜 구하기
$twoMonthsAgo
=
date
(
'Y-m-d H:i:s'
,
strtotime
(
'-2 months'
));
/**
* 폴더의 총 용량을 계산하는 함수 (MB 단위)
*/
function
getFolderSize
(
$folderPath
)
{
if
(
!
is_dir
(
$folderPath
))
{
return
"❌ 없음"
;
}
$size
=
shell_exec
(
"du -sb "
.
escapeshellarg
(
$folderPath
)
.
" | cut -f1"
);
if
(
$size
===
null
)
{
return
"❌ 오류"
;
}
return
round
(
$size
/
(
1024
*
1024
),
2
);
// MB 단위로 변환
}
/**
* CLI 표 출력 함수
*/
function
printTable
(
$data
,
$title
)
{
global
$colWidths
;
echo
"
\n
$title
\n
"
;
$divider
=
str_repeat
(
"="
,
array_sum
(
$colWidths
)
+
count
(
$colWidths
)
*
3
);
echo
"
$divider
\n
"
;
// 헤더 출력
printf
(
"| %-3s | %-25s | %-15s | %-15s | %-15s | %-14s | %-13s | %-13s | %-13s | %-20s | %-20s |
\n
"
,
"상태"
,
"데이터베이스"
,
"테이블"
,
"총 회원 수"
,
"2달 이내 접속"
,
"홈 폴더 존재"
,
"/home 크기"
,
"/var 크기"
,
"총 크기"
,
"가장 오래된 로그인"
,
"최신 로그인"
);
echo
"
$divider
\n
"
;
// 헤더 아래 구분선 추가
if
(
count
(
$data
)
===
0
)
{
echo
"| 데이터 없음 |
\n
"
;
echo
"
$divider
\n
"
;
return
;
}
// 데이터 출력
foreach
(
$data
as
$row
)
{
printf
(
"| %-3s | %-25s | %-15s | %15d | %15d | %-14s | %13s MB | %13s MB | %13s MB | %-20s | %-20s |
\n
"
,
$row
[
'status'
],
$row
[
'database'
],
$row
[
'table'
],
$row
[
'totalUsers'
],
$row
[
'activeUsers'
],
$row
[
'homeFolder'
],
$row
[
'homeFolderSize'
],
$row
[
'mysqlFolderSize'
],
$row
[
'totalSize'
],
$row
[
'oldestLogin'
],
$row
[
'recentLogin'
]
);
}
echo
"
$divider
\n
"
;
}
try
{
// MySQL 서버에 연결
$pdo
=
new
PDO
(
"mysql:host=
$host
"
,
$user
,
$pass
);
$pdo
->
setAttribute
(
PDO
::
ATTR_ERRMODE
,
PDO
::
ERRMODE_EXCEPTION
);
// 컬럼 너비 설정
$colWidths
=
array
(
"status"
=>
3
,
"database"
=>
25
,
"table"
=>
15
,
"totalUsers"
=>
15
,
"activeUsers"
=>
15
,
"homeFolder"
=>
14
,
"homeFolderSize"
=>
13
,
"mysqlFolderSize"
=>
13
,
"totalSize"
=>
13
,
"oldestLogin"
=>
20
,
"recentLogin"
=>
20
);
// 모든 데이터베이스 목록 가져오기
$dbs
=
$pdo
->
query
(
"SHOW DATABASES"
)
->
fetchAll
(
PDO
::
FETCH_COLUMN
);
$dbData
=
array
();
foreach
(
$dbs
as
$db
)
{
$pdo
->
exec
(
"USE `
$db
`"
);
// 폴더 크기 계산
$homeFolderPath
=
"/home/
$db
"
;
$mysqlFolderPath
=
"/var/lib/mysql/
$db
"
;
$folderExists
=
is_dir
(
$homeFolderPath
)
?
"✅ 있음"
:
"❌ 없음"
;
$homeFolderSize
=
getFolderSize
(
$homeFolderPath
);
$mysqlFolderSize
=
getFolderSize
(
$mysqlFolderPath
);
$totalSize
=
(
$homeFolderSize
>
0
?
$homeFolderSize
:
0
)
+
(
$mysqlFolderSize
>
0
?
$mysqlFolderSize
:
0
);
// `t_pty_users`와 `t_user` 테이블이 존재하는지 확인
$checkTables
=
array_merge
(
$pdo
->
query
(
"SHOW TABLES LIKE 't_pty_users'"
)
->
fetchAll
(
PDO
::
FETCH_COLUMN
),
$pdo
->
query
(
"SHOW TABLES LIKE 't_user'"
)
->
fetchAll
(
PDO
::
FETCH_COLUMN
)
);
if
(
empty
(
$checkTables
))
continue
;
$tableName
=
in_array
(
't_pty_users'
,
$checkTables
)
?
't_pty_users'
:
't_user'
;
// 회원 수 및 2달 이내 접속한 회원 수 조회
$stmtUsers
=
$pdo
->
query
(
"SELECT COUNT(*) FROM `
$tableName
`"
);
$totalUsers
=
$stmtUsers
->
fetchColumn
();
$stmtActiveUsers
=
$pdo
->
prepare
(
"SELECT COUNT(*) FROM `
$tableName
` WHERE lastLoginDateTime > :date"
);
$stmtActiveUsers
->
execute
(
array
(
'date'
=>
$twoMonthsAgo
));
$activeUsers
=
$stmtActiveUsers
->
fetchColumn
();
// 로그인 날짜 조회
$stmt
=
$pdo
->
query
(
"SELECT MIN(lastLoginDateTime) AS minLogin, MAX(lastLoginDateTime) AS maxLogin FROM `
$tableName
`"
);
$loginData
=
$stmt
->
fetch
(
PDO
::
FETCH_ASSOC
);
if
(
!
$loginData
||
!
$loginData
[
'minLogin'
])
continue
;
$status
=
(
$loginData
[
'maxLogin'
]
<=
$twoMonthsAgo
)
?
"🔴"
:
"🟢"
;
$dbData
[]
=
array
(
'status'
=>
$status
,
'database'
=>
$db
,
'table'
=>
$tableName
,
'totalUsers'
=>
$totalUsers
,
'activeUsers'
=>
$activeUsers
,
'homeFolder'
=>
$folderExists
,
'homeFolderSize'
=>
$homeFolderSize
,
'mysqlFolderSize'
=>
$mysqlFolderSize
,
'totalSize'
=>
$totalSize
,
'oldestLogin'
=>
$loginData
[
'minLogin'
],
'recentLogin'
=>
$loginData
[
'maxLogin'
]
);
}
// 총 크기 기준으로 내림차순 정렬
usort
(
$dbData
,
function
(
$a
,
$b
)
{
if
(
$b
[
'totalSize'
]
>
$a
[
'totalSize'
])
return
1
;
if
(
$b
[
'totalSize'
]
<
$a
[
'totalSize'
])
return
-
1
;
return
0
;
});
// 데이터 구분
$oldData
=
array
();
$recentData
=
array
();
foreach
(
$dbData
as
$data
)
{
if
(
$data
[
'status'
]
===
"🔴"
)
{
$oldData
[]
=
$data
;
}
else
{
$recentData
[]
=
$data
;
}
}
// 출력 실행
printTable
(
$oldData
,
"🔴 2달 이상 지난 로그인 DB 목록 (크기 정렬)"
);
printTable
(
$recentData
,
"🟢 2달 이내 로그인한 DB 목록 (크기 정렬)"
);
}
catch
(
PDOException
$e
)
{
echo
"❌ 에러 발생: "
.
$e
->
getMessage
();
}
?>
platyhouse
@platyhouse
mentioned in commit
8587004b
·
Dec 16, 2025
mentioned in commit
8587004b
mentioned in commit 8587004bfbebb2ceff13804bc1eea04727f6a285
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment