블로그는 나의 힘!
[ Programing ]/Lua Scirpt2025. 7. 7. 17:10

g_CurrentTime = os.time()

local TIME_MIN = 60
local TIME_HOUR = TIME_MIN * 60
local TIME_DAY = TIME_HOUR * 24
local TIME_WEEK = TIME_DAY * 7

--!< 시간 확인
function GetTargetDay(tmTime, standHour, standMinute)
      return os.date("%Y%m%d", tmTime - (standHour * TIME_HOUR) - (standMinute * TIME_MIN))
end

--!< 경과 일
function BetweenDay(baseTime, targetTime)
      local outputDay = math.floor((targetTime - baseTime) / TIME_DAY)
      return outputDay
end

--!< 날짜 변환 (yyyymmdd)
function ConvertTime(targetDate)
      local targetValue = targetDate

      local targetYear = math.floor(targetValue / (100 * 100))

      targetValue = math.floor(targetValue % (100 * 100))
      local targetMonth = math.floor(targetValue / 100)
      targetValue = math.floor(targetValue % 100)
      local targetDay = targetValue

      local targetTime = os.time{
            year = targetYear,
            month = targetMonth,
            day = targetDay,
            hour = 0,
            min = 0,
            sec = 0,
      }

      return tonumber(targetTime)
end

--!< 매주 초기화 시간 계산 -다음 종료 시간
function GetNextWeekTime(nTargetDay)
      local targetTime = ConvertTime(nTargetDay)     --!< YYYYMMDD -> time (EX : 20250626 -> 1750863600)
      local currentWeek = tonumber(os.date("%w", targetTime))       --!< 0:일, ~ 6:토
      local everyWeek = 2       --!< 매주 초기화 대상 요일
      local MaxWeek = 6 + 1

      --!< 다음 초기화 날짜 계산
      local addDay = 0
      if (currentWeek > everyWeek) then       --!< 현재가 요일보다 초과 시
            addDay = MaxWeek - currentWeek + everyWeek
      elseif (currentWeek < everyWeek) then       --!< 현재가 요일보다 미만 시
            addDay = everyWeek - currentWeek
      else
            addDay = MaxWeek       --!< 동일하면 일주일 가산 +7
      end

     return targetTime + (addDay * TIME_DAY)
end


--!< Main ...
--!< YYYYMMDD (EX : 20250626)

local strTargetDay = GetTargetDay(g_CurrTime, 6, 0)
local nTargetDay = tonumber(strTargetDay)

--!< 매주 초기화 시간 계산
local nextTime = GetNextTime(nTargetDay)
local nextDate = tonumber(os.date("%Y%m%d", nextTime))

--!< 경과 일일 계산 (현재일 - 시작일)
local nStartTime = ConvertTime(20250530)
local nPassDay = BetweenDay(nStartTime, ConvertTime(nTargetDay))



 

'[ Programing ] > Lua Scirpt' 카테고리의 다른 글

[Lua] os date / os time  (0) 2025.06.26
[Lua] 문자 합치기.  (0) 2024.07.10
[LUA] Bit Flag  (0) 2023.05.02
[Lua] Bit Flag  (0) 2023.02.28
[Lua] os Time  (0) 2023.02.28
Posted by Mister_Q
[ Programing ]/Lua Scirpt2025. 6. 26. 23:08

-- os Time
local targetTime = {
     year = 2025,
     month = 6,
     day = 26,
     hour = 23,
     min = 15,
     sec = 07 } 

local timestamp = os.time(targetTime)
print("TimeStamp: ", timestamp)      -- 1750947307

local value1 = os.date("%c", current_timestamp)     -- 지역별 날짜 및 시간 표현   - Thu Jun 26 23:15:07 2025
local value2 = os.date("%Y", current_timestamp)     -- 4자리 연도   - 2020
local value3 = os.date("%m", current_timestamp)     -- 2자리 월 (01~12)   - 06
local value4 = os.date("%d", current_timestamp)     -- 월중 일 (01~31)   - 26
local value5 = os.date("%H", current_timestamp)     -- 24시간 형식 시간 (00~23)   - 23
local value6 = os.date("%M", current_timestamp)     -- 2자리 분 (00~59)   - 15
local value7 = os.date("%S", current_timestamp)     -- 2자리 초 (00~59)   - 7
local value8 = os.date("%w", current_timestamp)     -- 요일 (일=0, 월=1, ~ 토=6)   - 4(목)
local value9 = os.date("%j", current_timestamp)     -- 연중 일 (001~366)   - 177
local value10 = os.date("%p", current_timestamp)     -- 현재 로케일에 따른 오전/오후 (AM/PM)   - PM
local value11 = os.date("%Z", current_timestamp)     -- 시간대 이름, 약어   - KST (시스템 설정 따라 다름)
local value12 =  os.date("%Y%m%d%H%M%S", current_timestamp)      -- YYYYmmddHHMMSS   - 20250626231507



-- os Date
local dateInfo = os.date("*t", timestamp)


local value20 = dateInfo.year     -- 연도   - 2025

local value21 = dateInfo.month     -- 월 (1~12)   - 6
local value22 = dateInfo.day     -- 일 (1~31)   - 26
local value23 = dateInfo.hour     -- 시 (0~23)   - 23
local value24 = dateInfo.min     -- 분 (0-59)   - 15
local value25 = dateInfo.sec     -- 초 (0-59)   - 7
local value26 = dateInfo.wday     -- 요일 (일=1, 월=2, ~토=7)   - 5(목)   ※ 참고: os.date("%w") → 일=0, 월=1, ~토=6
local value27 = dateInfo.yday     -- 연중 일 (1월 1일부터 일수, 1 ~ 366)
local value28 = dateInfo.isdst     -- 일광 절약 시간 적용 여부 (true, false).   해당 시간 일광 절약 시간 true, 아니면 false



-- Other os Time
-- 초과하는 값을 넣어도 Lua가 자동으로 다음 달로 넘어가게 계산해 적용
-- 현재 시간을 기준으로 10일 후 (6월 27일 + 10일 = 7월 7일)
local targetTime = os.time{
     year = 2025, 
     month = 6,
     day = 27 + 10,      -- 37일이 됩니다.
     hour = 0,
     min = 0,
     sec = 0, }
-- 계산된 targetTime을 사람이 읽을 수 있는 형태로 변환

local formattedDate = os.date("%Y%m%d%H%M%S", targetTime)
print("계산된 날짜:", formattedDate)     -- 계산된 날짜: 2025년 07월 07일 00시 00분 00초






'[ Programing ] > Lua Scirpt' 카테고리의 다른 글

[Lua] 시간 체크 함수 정리.  (0) 2025.07.07
[Lua] 문자 합치기.  (0) 2024.07.10
[LUA] Bit Flag  (0) 2023.05.02
[Lua] Bit Flag  (0) 2023.02.28
[Lua] os Time  (0) 2023.02.28
Posted by Mister_Q
[ Programing ]/Redis2025. 5. 28. 15:43

## Redis wget 으로 받아 설치.

# Redis 다운로드 (0.0.0 -> 원하는 버전으로)
] $ wget https://download.redis.io/releases/redis-0.0.0.tar.gz

#  압축 해제 
] $ tar xzvf redis-0.0.0.tar.gz

#  의존성 패키지 설치
] $ cd ./redis-0.0.0/deps
~/redis-0.0.0/deps] $ make hiredis jemalloc linenoise lua

#  Redis 설치
~/redis-0.0.0/deps] $ cd ../
~/redis-0.0.0] $ make

※ jemalloc 오류 시
] $ yum install jemalloc
※ make[1]: cc: Command not found 라는 메시지와 함께 에러가 난다면 gcc의 설치를 먼저 진행
] $ yum install gcc
※ systemd-devel (redis 테스트)
] $ yum install systemd-devel


######################################
## 자동 설정으로 작성 시
~/redis-0.0.0] $ cd ./utils
~/redis-0.0.0/utils] $ install_server.sh
-------------------------------------------------
   Please select the redis port for this instance : [6379]     - 포트 설정. (원하는 포트 변경 가능)
   Please select the redis config file name [/etc/redis/.6379.conf]     - Config 파일 이름 설정. (Enter)
   Please select the redis log file name [/var/log/redis_6379.log]     - Log 파일 이름 설정. (Enter)
   Please select the redis data directory for this instance [/var/lib/redis/6379]     - 데이터 폴더 이름 설정. (Enter)
   Please select the redis execute path []     - Redis 서버 파일 경로 작성. (~/redis-0.0.0/src/redis-server)
-------------------------------------------------


# 만약 'This systems seems to use systemd.' 설치 진행 불가 시 기본 설치 스크립트 수정 필요.
~redis-0.0.0/utils] $ vi ./install_server.sh
------------------------------------------------- 
  --!< 해당 코드 주석.
  #bail if this system is managed by systemd
  _pid_1_exe = "$(readlink -f /proc/1/exe)"
  if [ "${_pid_1_exe##*/}" = systemd ]
  then
     echo "This systems seems to use systemd."
     echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
     exit 1
  fi
-------------------------------------------------


# redis port 테스트
~/redis-0.0.0/src] $ ./redis-cli -p 6379
127.0.0.1:6379> ping     -> PONG (확인)
127.0.0.1:6379> exit

# 설정 편집 -서비스 중지.
] $ sudo /etc/init.d/redis_6379 stop
] $ sudo chmod 777 /etc/redis/6379.conf

# conf 파일 변경 -Master
] $ vi /etc/redis/6379.conf
-------------------------------------------------
    # bind 127.0.0.1 -::1
    bind 0.0.0.0     # 모든 아이피 허용

    # protected-mode yes
    protected-mode no     # yes : bind 미지정시 로컬로만 접속 / no : bind 미지정시 모든 IP 접속

    # save 900 1     # 디스크 저장 주기 설정. 900초에 1개 이상 데이터 변경 시 스냅샷
    # save 300 10
    # save 60 10000
    save 3600 1 

    # appendonly no
    appendonly yes     # AOF 설정 (append-only file 저장 유무 (RDB OFF에 Cluster 롤 체인지 시 데이터 유실 가능))

    appendfilename "appendonly.aof"
    appenddirname "appendonlydir"

    ############################
    # 선택사항 -클러스터 설정
    ############################
    # cluster-enabled yes
    cluster-enabled yes     # 클러스터 활성화

    cluster-config-file nodes-6379.conf     # 클러스터 저장 파일 지정

    # cluster-node-timeout 15000
    cluster-node-timeout 3000     # 클러스터 노드 다운 시간 체크 3000 -> 3초
-------------------------------------------------


# 복사 및 편집.
] $ sudo cp /etc/init.d/redis_6379 /etc/init.d/redis_6380
] $ sudo cp /etc/init.d/redis_6379 /etc/init.d/redis_7381

 -- 편집 (s/:찾을 문자열, g:변경, i/대문자 무시)
] $ sudo sed -i 's/6379/6380/gi' /etc/init.d/redis_6380
] $ sudo sed -i 's/6379/7381/gi' /etc/init.d/redis_7381

 -- 폴더 생성
] $ sudo mkdir /var/lib/redis/6380
] $ sudo mkdir /var/lib/redis/7381

] $ sudo cp /etc/redis/6379.conf /etc/redis/6380.conf
] $ sudo cp /etc/redis/6379.conf /etc/redis/7381.conf

 -- 편집 (s/:찾을 문자열, g:변경, i/대문자 무시)
] $ sudo sed -i 's/6379/7001/gi' /etc/redis/6380.conf
] $ sudo sed -i 's/6379/8002/gi' /etc/redis/7381.conf

※ 각 [포트].conf 파일 포트 변경.
] $ vi /etc/init.d/redis_[포트]
-------------------------------------------------
    CONF="/etc/redis/[포트].conf"
    REDISPORT="[포트]"
    -- # 주석에 있는 [포트]도 변경 포트로 변경 필요시 변경
-------------------------------------------------
] $ vi /etc/redis/[포트].conf
-------------------------------------------------
    port [포트]
    pidfile /var/run/redis_[포트].pid
    logfile /var/log/redis_[포트].log
    dir /var/lib/redis/[포트]
    cluster-config-file nodes-[포트].conf
-------------------------------------------------


# 포트 테스트
 
] $ sudo /etc/init.d/redis_6379 start
] $ sudo /etc/init.d/redis_6380 start
] $ sudo /etc/init.d/redis_7381 start

] $ ~/redis-0.0.0/src/redis-cli -p 6379
127.0.0.1:6379> ping     -> PONG (확인)
127.0.0.1:6379> exit

] $ ~/redis-0.0.0/src/redis-cli -p 6380
127.0.0.1:6380> ping      -> PONG (확인)
127.0.0.1:6380> exit

] $ ~/redis-0.0.0/src/redis-cli -p 7381
127.0.0.1:7381> ping      -> PONG (확인)
127.0.0.1:7381> exit


# Slave Server도 위와 동일하게 진행하여 설정.
######################################



※ 마스터가 이상이 생기면 슬레이브로 바로 대응이 가능하도록 포트 맞물리며 어긋나게.
Master Server Port : 6379, 6380 ,7381 이면, 
Slaver Server Port : 7379, 7380, 6381 설정.


######################################
## 클러스터 설정
# 클러스터 마스터 등록
~/redis-0.0.0/src] $ ./redis-cli --cluster create [MasterIP]:6379 [MasterIP]:6380 [MasterIP]:7381

# 클러스터 슬레이브 등록 (슬레이브 없다면 미등록)
~/redis-0.0.0/src] $ ./redis-cli --cluster add-node [SlaveIP]:7379 [MasterIP]:6379 -- cluster-slave
~/redis-0.0.0/src] $ ./redis-cli --cluster add-node [SlaveIP]:7380 [MasterIP]:6380 -- cluster-slave
~/redis-0.0.0/src] $ ./redis-cli --cluster add-node [SlaveIP]:6381 [MasterIP]:7381 -- cluster-slave

# 클러스터 설정 확인
~/redis-0.0.0/src] $ ./redis-cli -h [MasterIP] -p 6379 -c
[MasterIP]:6379> cluster info     -> 클러스터 기기 정보 확인.
[MasterIP]:6379> cluster nodes     -> 클러스터 마스터&슬레이브 확인.
[MasterIP]:7000> cluster slots     -> 클러스터 슬롯 그룹 정보 확인.
[MasterIP]:6379> exit


## 클러스터 삭제 및 재 설정 필요시.
# 클러스터 삭제 -클러스터 재 구동 시 관련 파일 삭제 후 설치 레디스 설정 재진행.
-- 레디스 실행 정지.
] $ /etc/init.d/redis_[포트] stop
-- Dump, Cluster 데이터 정보 삭제.
] $ sudo rm -r /var/lib/redis/[포트]
-- 레디스 실행 삭제.
] $ sudo rm -r /etc/init.d/redis_[포트]
-- config 설정 위치.
] $ sudo rm -r /etc/redis/[포트].conf
######################################


## 서버 중지 / 시작
] $ sudo /etc/init.d/redis_6379 stop
] $ sudo /etc/init.d/redis_6380 stop
] $ sudo /etc/init.d/redis_6381 stop
] $ sudo /etc/init.d/redis_7379 stop
] $ sudo /etc/init.d/redis_7380 stop
] $ sudo /etc/init.d/redis_7381 stop

] $ sudo /etc/init.d/redis_6379 start
] $ sudo /etc/init.d/redis_6380 start
] $ sudo /etc/init.d/redis_6381 start
] $ sudo /etc/init.d/redis_7379 start
] $ sudo /etc/init.d/redis_7380 start
] $ sudo /etc/init.d/redis_7381 start


# redis 서버 실행 (X)

$ cd [redis 설치 경로]/redis-0.0.0/src
~/redis-0.0.0/src] $ sudo ./redis-server -p [포트].conf (설정한 port 만큼 구동)


# 프로세스 구동 여부 확인
] $ ps -ef | grep redis

# 클라이언트 접속 (redis-cli -h [레디스 서버의 IP주소] -p [포트번호] -a [비밀번호])
~/redis-0.0.0/src] $ ./redis-cli -h [IP] -p [Port]

# 동작 테스트
[IP]:[Port]> ping   ("PONG" 나오면 성공)
[IP]:[Port]> set testKey testValue
[IP]:[Port]> get testKey   ("testValue" 나오면 성공)


# 기타 - 위치
-- PID 위치.
] $ /var/run/
-- Dump, Cluster 데이터 정보 위치.
] $ /var/lib/redis/
-- Log 위치.
] $ /var/log/
-- redis-cli, redis-server 위치.
] $ /home1/[사용자]/redis-0.0.0/src
-- 실행 위치.
] $ /etc/init.d/
-- config 설정 위치.
] $ /etc/redis/

'[ Programing ] > Redis' 카테고리의 다른 글

[Linux] Redis 백업 / 복원.  (0) 2025.05.16
Redis 데이터 영구 저장과 동기화 RDB, AOF  (0) 2025.02.20
Redis 레퍼런스.  (0) 2024.05.21
[Redis] Reference  (0) 2023.03.02
[Linux] Redis Cluster 설정  (1) 2022.10.20
Posted by Mister_Q