
내 시스템 시간대는 Asia/Tehran이고DST 변경 조정여름(봄 앞으로), 겨울 뒤로; 하지만 이러한 DST 조정을 비활성화하고 시간대를 항상 UTC+3:30으로 유지해야 합니다. Linux에서 이 작업을 어떻게 수행합니까?
답변1
1부: 운영 체제 시간대 업데이트
~에서2022년 9월 22일부터 이란은 일광 절약 시간제를 폐지하고 연중 표준시를 준수합니다.. 이것첫 번째이러한 업데이트가 포함된 공식 패키지는 IANA의 "tzdata2022b.tar.gz" 패키지에 있으므로 여기에서 아시아/테헤란 지역 시간대 업데이트를 적용하는 방법은 다음과 같습니다.
패키지 다운로드tzdata2022b.tar.gz압축을 풀어보세요.최신 패키지를 받으려면 여기를 클릭하여 모든 패키지를 확인하세요..
$ tar -xzvf tzdata2022b.tar.gz
"zic"(시간대 컴파일러) 명령을 통해 컴파일하여 관심 지역(아시아) 시스템 시간대 데이터에 업데이트를 적용합니다.루트/루트 권한사용자):
# zic asia
노트: 이러한 변경 사항은 아시아/테헤란 및 기타 아시아 지역에 직접 적용됩니다.
다음 명령을 사용하여 업데이트가 올바르게 적용되었는지, DST가 비활성화되었는지 확인합니다("9월 21일 수요일 23:59:59"(이란 표준시로 +0330으로 대체) 이후 날짜에는 DST 조정이 발생하지 않습니다.) 금후 ):
# zdump -v -c2022,2029 Asia/Tehran Asia/Tehran -9223372036854775808 = NULL Asia/Tehran -9223372036854689408 = NULL Asia/Tehran Mon Mar 21 20:29:59 2022 UTC = Mon Mar 21 23:59:59 2022 +0330 isdst=0 Asia/Tehran Mon Mar 21 20:30:00 2022 UTC = Tue Mar 22 01:00:00 2022 +0430 isdst=1 Asia/Tehran Wed Sep 21 19:29:59 2022 UTC = Wed Sep 21 23:59:59 2022 +0430 isdst=1 Asia/Tehran Wed Sep 21 19:30:00 2022 UTC = Wed Sep 21 23:00:00 2022 +0330 isdst=0 Asia/Tehran 9223372036854689407 = NULL Asia/Tehran 9223372036854775807 = NULL
/etc/localtime
현지 시간을 수정된 시간대 정보와 다시 연결하려면 다음 명령을 사용하십시오.# zic -l Asia/Tehran
정확한 날짜와 시간을 확인
date
하고 보고하십시오.hwclock
국가별 시간대 업데이트(이 답변에서는 아시아/테헤란)를 구축하고 적용하는 방법에 대한 솔루션은 다음과 같습니다.
라는 사용자 정의 ZONE 파일을 생성
Tehran_timeZone
하고 다음 영역 정보를 추가합니다(각 국가의 규칙 및 영역 정보는 tzdata2022b.tar.gz 패키지의 관련 영역 파일에서 찾을 수 있음).$ cat Tehran_timeZone # Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule Iran 1910 only - Jan 1 00:00 0 - Rule Iran 1977 only - Mar 21 23:00 1:00 - Rule Iran 1977 only - Oct 20 24:00 0 - Rule Iran 1978 only - Mar 24 24:00 1:00 - Rule Iran 1978 only - Aug 5 01:00 0 - Rule Iran 1979 only - May 26 24:00 1:00 - Rule Iran 1979 only - Sep 18 24:00 0 - Rule Iran 1980 only - Mar 20 24:00 1:00 - Rule Iran 1980 only - Sep 22 24:00 0 - Rule Iran 1991 only - May 2 24:00 1:00 - Rule Iran 1992 1995 - Mar 21 24:00 1:00 - Rule Iran 1991 1995 - Sep 21 24:00 0 - Rule Iran 1996 only - Mar 20 24:00 1:00 - Rule Iran 1996 only - Sep 20 24:00 0 - Rule Iran 1997 1999 - Mar 21 24:00 1:00 - Rule Iran 1997 1999 - Sep 21 24:00 0 - Rule Iran 2000 only - Mar 20 24:00 1:00 - Rule Iran 2000 only - Sep 20 24:00 0 - Rule Iran 2001 2003 - Mar 21 24:00 1:00 - Rule Iran 2001 2003 - Sep 21 24:00 0 - Rule Iran 2004 only - Mar 20 24:00 1:00 - Rule Iran 2004 only - Sep 20 24:00 0 - Rule Iran 2005 only - Mar 21 24:00 1:00 - Rule Iran 2005 only - Sep 21 24:00 0 - Rule Iran 2008 only - Mar 20 24:00 1:00 - Rule Iran 2008 only - Sep 20 24:00 0 - Rule Iran 2009 2011 - Mar 21 24:00 1:00 - Rule Iran 2009 2011 - Sep 21 24:00 0 - Rule Iran 2012 only - Mar 20 24:00 1:00 - Rule Iran 2012 only - Sep 20 24:00 0 - Rule Iran 2013 2015 - Mar 21 24:00 1:00 - Rule Iran 2013 2015 - Sep 21 24:00 0 - Rule Iran 2016 only - Mar 20 24:00 1:00 - Rule Iran 2016 only - Sep 20 24:00 0 - Rule Iran 2017 2019 - Mar 21 24:00 1:00 - Rule Iran 2017 2019 - Sep 21 24:00 0 - Rule Iran 2020 only - Mar 20 24:00 1:00 - Rule Iran 2020 only - Sep 20 24:00 0 - Rule Iran 2021 2022 - Mar 21 24:00 1:00 - Rule Iran 2021 2022 - Sep 21 24:00 0 - # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone Asia/Tehran 3:25:44 - LMT 1916 3:25:44 - TMT 1935 Jun 13 # Tehran Mean Time 3:30 Iran +0330/+0430 1977 Oct 20 24:00 4:00 Iran +04/+05 1979 3:30 Iran +0330/+0430
구성 매개변수에 대한 자세한 내용은 "만지크"
"zic" 명령을 통해 아시아/테헤란 시간대 업데이트를 적용하도록 컴파일합니다.
$ zic Tehran_timeZone
/etc/localtime
현지 시간을 수정된 시간대 정보와 다시 연결하려면 다음 명령을 사용하십시오.# zic -l Asia/Tehran
노트: 사용 중인 Linux 배포판에 따라 시작 시 시스템이 사용하는 영역을 재구성해야 합니다( tzdata-update
또는 구성 사용 timedatectl set-timezone Asia/Tehran
).
노트:user/shell level timeZone 기본적으로 사용자/셸 수준에서 날짜와 시간을 표시할 때 동일한 명령이 사용되지만
변수가 다른 값으로 설정된 경우 해당 변수의 시간대를 읽고 적용하므로 Unset/ 이를 제거하거나 사용자 수준 쉘 구성 파일의 현재 위치로 설정하십시오. 이는 변수가 설정될 수 있는 사용자의 홈 디렉토리에서 파일을 찾는 명령입니다.date
/etc/localtime
TZ
TZ
TZ='Asia/Tehran'
TZ
# find /home/ -maxdepth 2 -type f -exec grep -wH 'TZ' {} +
노트: 시스템 전체 셸 구성 파일에 대해서도 동일하게 업데이트해야 합니다.
2부: Java 기반 애플리케이션(OpenJDK, OracleJDK, IBMJDK 등)의 시간대 업데이트
업데이트된 시간대 파일(https://data.iana.org/time-zones/releases/tzdata2022b.tar.gz)
tzdata2022b.tar.gz
파일을 Java 호환 시간대로 컴파일 하려면 Java 기반 컴파일러를 다운로드해야 합니다 . 우리는 오픈 소스 ZIUpdater 도구를 사용했습니다.https://www.azul.com/products/open-source-tools/ziupdater-time-zone-tool/)다음 명령을 실행하여 도구를 사용하여 tzdata2022b.tar.gz 패키지에서 시간대를 컴파일하십시오
ziupdater.jar
.$JAVA_HOME/bin/java -jar ziupdater.jar -l tzdata2022b.tar.gz
완벽한. 이 도구는 JDKv8+ 및 JDKv7 및 이전 버전에 대해 tzdb.dat(tzdb.dat의 원래 위치)를 생성하고
ziupdater.jar
업데이트된 모든 시간대 파일을 포함하는 (원래 위치는 )라는 디렉터리를 생성합니다. 이전 시간대만 바꾸면 됩니다. 새 시간대를 사용하여 파일을 생성합니다(먼저 이전 시간대에서 백업을 만들어야 할 수도 있음).$JAVA_HOME/lib/tzdb.dat
zi
$JAVA_HOME/lib/zi/*
응용 프로그램을 다시 시작해야 할 수도 있습니다.
노트:
시간대를 패치한 후 필요한 경우:
TZ
환경 변수를 설정 해제 하고sshd
서비스를 다시 시작합니다.- 재시작
cron
/crond
서비스. rsyslog
syslog 서비스 또는 서버가 실행 중인 다른 syslog 서비스를 다시 시작합니다 .- 일부 응용 프로그램(특히 데이터베이스)은 운영 체제나 JDK 시간대 파일을 모두 사용하지 않을 수 있습니다. 이에 대한 방법을 알아보려면 해당 설명서를 별도로 참조해야 합니다.