在使用 nohup
命令运行进程时,默认情况下,启动参数不会直接记录在生成的 nohup.out
日志文件中。如果你希望将进程的启动参数也记录下来,可以采用以下几种方法:
在执行 nohup
命令的同时,使用 echo
将参数输出到 nohup.out
文件中。例如:
nohup your_command --param1 value1 --param2 value2 >> nohup.out 2>&1 &
echo "Started your_command with parameters: --param1 value1 --param2 value2" >> nohup.out
解释:
your_command --param1 value1 --param2 value2
是你想要运行的命令及其参数。>> nohup.out
将标准输出追加到 nohup.out
文件中。2>&1
将标准错误重定向到标准输出,确保错误信息也记录在 nohup.out
中。echo
命令将启动参数手动写入 nohup.out
。创建一个 shell 脚本来自动记录参数并执行命令。例如,创建一个名为 run_with_log.sh
的脚本:
#!/bin/bash
# 记录开始时间和参数
echo "Starting at $(date)" >> nohup.out
echo "Command: $0 $@" >> nohup.out
# 执行实际命令
exec "$@"
然后给脚本赋予执行权限并使用 nohup
运行:
chmod +x run_with_log.sh
nohup ./run_with_log.sh your_command --param1 value1 --param2 value2 &
解释:
exec "$@"
替换当前的 shell 进程来执行传入的命令,这样日志记录和命令执行在同一个进程中,避免子进程的问题。如果参数较多或复杂,可以考虑通过环境变量传递参数,并在脚本中读取这些变量进行记录。例如:
PARAM1="value1"
PARAM2="value2"
nohup your_command --param1 "$PARAM1" --param2 "$PARAM2" >> nohup.out 2>&1 &
echo "Started your_command with PARAM1=$PARAM1 and PARAM2=$PARAM2" >> nohup.out
tee
命令实时记录如果你希望在终端和日志文件中同时查看输出,可以使用 tee
命令:
nohup your_command --param1 value1 --param2 value2 | tee nohup.out
不过,这种方法不会记录命令本身,只记录命令的输出。
最直接且灵活的方法是方法一,即在启动命令的同时手动将参数写入日志文件。这确保了无论命令如何变化,参数都能被准确记录。根据实际需求选择合适的方法,以确保日志的完整性和可读性。
示例:
假设你有一个名为 app
的应用程序,使用以下命令启动并记录参数:
nohup ./app --mode production --port 8080 >> app.log 2>&1 &
echo "Started app with parameters: --mode production --port 8080" >> app.log
这样,app.log
文件中将包含类似如下的内容:
Starting at Thu Apr 26 12:34:56 UTC 2024
Command: ./app --mode production --port 8080
[应用程序的标准输出和错误信息]
通过这种方式,你可以方便地追踪进程的启动参数及其运行状态。