nohup启动服务,每次启动时创建新的日志文件:避免日志文件过大
1.创建一个shell脚本test.sh,然后生成当前日期
#!/bin/bash # 获取当前日期和时间,格式化为 YYYY-MM-DD HH:MM:SS #current_datetime=$(date +"%Y-%m-%d %H:%M:%S") #echo "Current date and time is: $current_datetime"
# 获取当前日期和时间,格式化为 YYYY-MM-DD
current_datetime=$(date +"%Y-%m-%d")
echo "Current date and time is: $current_datetime"
sh test.sh执行后发现成功打印了一个日期,说明脚本没有问题了,那么我们开始来配置吧!
2.写一个nohup启动服务的脚本,案例如下:
在jenkins的execute shell脚本中加入以下的脚本内容:
whoami #检测8089端口是否启动了django服务, ps -ef | grep 0.0.0.0:8089 | grep -v grep | awk '{print $2}' | xargs kill -9 echo "=============Finish to kill real process =================="
BUILD_ID=DONTKILLME
echo "=========Start to run real server=========" cd /home1/worker/projects/qatest/test_tool_project/django2 git pull
#创建一个 以日期命名的log文件 cd log current_datetime=$(date +"%Y-%m-%d") echo $current_datetime touch ${current_datetime}.log cd ../ nohup python manage.py runserver 0.0.0.0:8088 >> log/${current_datetime}.log &
这样就实现了,每次重启服务后,就会自动创建一个 以日期命令的log文件。而且如果当日启动多次的话,当日的所有日志都是追加到同一个日志文件中。
3.下面来解释以下具体实现原由吧:
有些同学说他在用nohup启动服务后,每次重启一次服务,日志就会被清空,不知道是什么原因,这里来就是以下nohup的日志文件模式:
- 使用nohup启动程序时,日志文件被清空的原因主要是因为启动命令的设置方式。
- 当使用nohup启动程序时,默认情况下,标准输出(stdout)和标准错误(stderr)都会被重定向到nohup.out文件。例如,命令
nohup python my_script.py &会将所有程序的输出写入当前目录下的nohup.out文件。如果程序持续运行且不断输出日志,该文件会变得非常大,最终可能导致磁盘空间耗尽.
日志文件被清空的原因
1.覆盖模式:
如果使用覆盖模式启动程序,日志文件会被清空。例如,命令nohup java -jar test.jar > test.txt 2>&1 & 会将输出重定向到test.txt文件,每次启动都会覆盖该文件的内容。如果需要清空日志,必须重启服务才能从零开始记录.
2.追加模式:
如果使用追加模式启动程序,日志文件不会被清空,而是在文件末尾追加内容。例如,命令nohup java -jar test.jar >> test.txt 2>&1 & 会在test.txt文件的末尾追加内容。如果不停止服务,可以通过定时任务配合清空脚本来实现日志的自动清理.
案例:你可以直接在命令行中使用nohup和&来运行你的Django项目。例如,如果你的Django项目是通过manage.py runserver启动的,你可以这样做:
nohup python manage.py runserver >> app.log 2>&1 &
避免日志文件被清空的建议:
-
指定日志文件并限制大小:在启动命令中手动指定日志文件,而不是使用nohup.out。例如,
nohup python my_script.py > my_script.log 2>&1 &会将输出重定向到my_script.log文件。 -
使用logrotate管理日志:可以通过logrotate工具来管理日志文件的大小和轮转。例如,设置每天轮转日志,保留最近7个日志文件,当日志文件达到100MB时进行轮转,并压缩旧日志文件。
-
禁用日志输出:如果不需要日志记录,可以将输出重定向到/dev/null,避免占用磁盘空间。例如,
nohup python my_script.py >/dev/null 2>&1 &会将所有输出丢弃。

浙公网安备 33010602011771号