use the nohup command without getting nohup out + sql tip

本文探讨了如何在命令行中结合使用标准输出和错误输出的文件描述符,实现将两者输出到同一目的地,如/dev/null,以及如何在MySQL中使用临时表和特定运算符进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • command tip

we can combine file descriptors together: 2>&1 means "send standard error wherever standard output is going". That means that we get a single stream of output that includes both standard out and standard error intermixed with no way to separate them anymore, but it also means that we can include standard error in a pipe.

So the sequence >/dev/null 2>&1 means "send standard output to /dev/null" (which is a special device that just throws away whatever we write to it) "and then send standard error to wherever standard output is going" (which we just made sure was /dev/null). Basically, "throw away whatever this command writes to either file descriptor"

for more info, you'd better read 1 reference.

 

  • mysql tip

a. Temporary tables only works in your curent open session.

b. in join sql, we can use >= operator

select 
  id, 
  substring_index(
    substring_index(email_recipients, ',', n), 
    ',', 
    -1
  ) as email
from dashboards
join numbers
  on char_length(email_recipients) 
    - char_length(replace(email_recipients, ',', '')) 
    >= n - 1

references:

1. https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out

2. https://www.periscopedata.com/blog/splitting-comma-separated-values-in-mysql

<think>好的,用户问的是在启动达梦数据库服务器使用nohup dmserver之后,按了Ctrl+C导致服务停止,如何改为后台启动。我需要详细分析这个问题,并提供正确的解决方案。 首先,用户可能是在命令行直接运行了nohup dmserver,然后没有正确使用后台运行的方式,导致即使用了nohup,Ctrl+C还是中断了进程。这时候需要检查他们的启动命令是否正确。 通常,nohup的用法是搭配&符号来将进程放到后台运行,这样即使终端关闭,进程也不会终止。用户可能只用了nohup而没有加&,导致进程仍然在前台运行,所以Ctrl+C会发送SIGINT信号终止进程。这时候应该建议用户在命令末尾加上&符号。 接下来,正确的命令应该是nohup dmserver ... &,这里的...代表可能的参数,比如路径或者配置文件。例如:nohup /dm8/bin/dmserver /dm8/data/DAMENG/dm.ini &。这样命令会在后台运行,并且输出默认重定向到nohup.out文件。 另外,用户可能没有处理标准输出和错误输出,导致nohup.out文件被占用或者权限问题。可以建议用户将输出重定向到指定文件,比如nohup dmserver ... > /dm8/log/nohup.log 2>&1 &,这样日志会更清晰,也方便排查问题。 然后,用户可能需要验证服务是否真的在后台运行。可以教他们使用ps -ef | grep dmserver或者ps aux | grep dmserver来查看进程是否存在。如果有问题,需要检查日志文件中的错误信息,比如nohup.out或者指定的日志路径。 此外,停止服务的方法也需要说明,使用kill命令或者达梦自带的停止脚本,比如./DmServiceDMSERVER stop,避免直接kill可能造成数据损坏。 最后,建议用户将启动命令写入脚本,方便管理,或者配置为系统服务,通过systemd来管理,这样更规范,也便于开机自启。 总结一下,用户的主要问题是没有正确使用&将进程放到后台,导致Ctrl+C终止了服务。解决方案是修正启动命令,添加&,并适当处理输出。同时,提供验证和停止服务的方法,以及后续的管理建议。</think>在Linux系统中,使用`nohup dmserver`启动达梦数据库服务时,如果直接按`Ctrl+C`会导致进程终止,这是因为默认情况下进程仍关联着当前终端。以下是完整的后台启动方案: --- ### **步骤1:正确的后台启动命令** ```bash nohup /dm8/bin/dmserver /dm8/data/DAMENG/dm.ini > /dm8/log/nohup.log 2>&1 & ``` - **关键参数说明** - `nohup`:忽略SIGHUP信号(终端关闭时保持进程运行) - `>`:将标准输出重定向到指定文件 - `2>&1`:将标准错误合并到标准输出 - `&`:将进程放入后台执行 --- ### **步骤2:验证服务状态** ```bash ps -ef | grep dmserver ``` 预期输出应包含类似内容: ``` dmuser 12345 1 0 10:00 ? 00:00:32 /dm8/bin/dmserver /dm8/data/DAMENG/dm.ini ``` - **注意**:第3列PPID=1表示进程已与终端解绑 --- ### **步骤3:服务停止方法** #### 优雅停止方式(推荐) ```bash cd /dm8/bin ./DmServiceDMSERVER stop ``` #### 强制停止方式 ```bash kill -9 $(pgrep -f dmserver) ``` --- ### **常见问题排查** 1. **日志无写入权限** ```bash chown -R dmdba:dinstall /dm8/log ``` 2. **端口被占用** ```bash netstat -tlnp | grep 5236 # 检查默认端口 ``` 3. **配置文件路径错误** 确保`dm.ini`路径与安装时的实际路径一致 --- ### **高级配置建议** #### 方案1:创建启动脚本 新建`/dm8/scripts/start_dm.sh`: ```bash #!/bin/bash nohup /dm8/bin/dmserver /dm8/data/DAMENG/dm.ini >> /dm8/log/runtime.log 2>&1 & ``` 赋予执行权限: ```bash chmod +x /dm8/scripts/start_dm.sh ``` #### 方案2:配置系统服务(推荐) 创建`/etc/systemd/system/dmserver.service`: ```ini [Unit] Description=DM Database Server After=network.target [Service] Type=forking User=dmdba ExecStart=/dm8/bin/DmServiceDMSERVER start ExecStop=/dm8/bin/DmServiceDMSERVER stop Restart=on-failure [Install] WantedBy=multi-user.target ``` 启用服务: ```bash systemctl daemon-reload systemctl start dmserver systemctl enable dmserver ``` --- ### **补充说明** - 达梦数据库的典型启动参数: ```bash dmserver path=/dm8/data/DAMENG/dm.ini AP_PORT=5237 ``` - 查看完整进程树: ```bash pstree -p | grep dmserver ``` 通过上述配置,服务将完全脱离终端在后台运行,即使关闭SSH连接也不会影响数据库服务。建议优先采用systemd方案,这是生产环境的标准管理方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值