Linux 系统时间设置问题
昨天重装了 vps 系统,在设置 crontab 定时任务时发现并没有在指定的时间执行脚本。于是就进行排查问题。
测试在 /etc/crontab
添加一条测试任务:
30 10 * * * root python -V > /root/test.log
在 10:30 并没有看到 test.log 文件生成。
通过 systemctl status cron
查看信息:
Sep 17 10:21:01 niekun-bandwagon CRON[946]: pam_unix(cron:session): session clos
Sep 17 10:29:01 niekun-bandwagon cron[451]: (*system*) RELOAD (/etc/crontab)
在 10:29 crontab 脚本已经重新加载过了,但是并没有执行任务。
通过命令 cat /var/log/syslog | grep cron
查看系统日志:
Sep 16 21:46:35 niekun-bandwagon cron[451]: (CRON) INFO (pidfile fd = 3)
Sep 16 21:46:35 niekun-bandwagon cron[451]: (CRON) INFO (Running @reboot jobs)
Sep 16 22:29:01 niekun-bandwagon cron[451]: (*system*) RELOAD (/etc/crontab)
发现日志的时间比我当前时间晚了 12 个小时,会不会就是系统日期问题导致脚本没有达到设定的时间?
在按装新系统的后,使用 date
命令查看当前系统时间,发现时间是 UTC 时间,我通过 tzselect
命令设置了时区:
[root@db-server ~]# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 9
Please select one of the following time zone regions.
1) east China - Beijing, Guangdong, Shanghai, etc.
2) Heilongjiang (except Mohe), Jilin
3) central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
4) most of Tibet & Xinjiang
5) west Tibet & Xinjiang
#? 1
The following information has been given:
China
east China - Beijing, Guangdong, Shanghai, etc.
Therefore TZ='Asia/Shanghai' will be used.
Local time is now: Sun Jan 11 23:31:51 CST 2015.
Universal Time is now: Sun Jan 11 15:31:51 UTC 2015.
Is the above information OK?
1) Yes
2) No
#? yes
Please enter 1 for Yes, or 2 for No.
#? 1
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
将 TZ='Asia/Shanghai'; export TZ
写入 ~/.profile
,并刷新文件:
source .bash_profile
测试当前系统时间:
root@niekun-bandwagon:~# date
Thu Sep 17 10:44:00 CST 2020
但是系统日志记录的时间还是不对,这就可能还是时区不对,手动复制亚洲时区文件到目录:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
更新 rsyslog 进程:
systemctl restart rsyslog
再次测试发现系统日志时间对了,crontab 脚本也可以正确执行。
也可以使用 timedatectl 命令设置时区:
# 查看当前时区设置
$ timedatectl
# 显示所有可用的时区
$ timedatectl list-timezones
# 设置当前时区
$ sudo timedatectl set-timezone Asia/Shanghai
标签:无