When doing a mysql multi-instance installation before, the installation was successful, linux It can also be started successfully; however, moving support-files/mysqld_multi.server to the /etc/init.d/ directory and setting the startup (chkconfig xxx on) fails;
I found the problem and started to solve it. I found that service xxx start could not start multiple instances of mysql, but mysqld_multi start could be used; then after various attempts, I found that the mysql environment variables set by /etc/profile could be printed out in a normal environment, but The mysql environment variable cannot be printed in the service made by the shell;
My /etc/frofile file:
export PATH=/usr/local/mysql/bin:$PATH
Execution: You can see that the mysql environment variable is set
[root@localhost init.d]# echo $PATH /usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Then we define a system V script
[root@localhost init.d]# vi /etc/init.d/mysqlmul #!/bin/bash #chkconfig: - 75 15 #description: test
Give permissions and set it to service
[root@localhost init.d]#chmod +x /etc/init.d/mysqlmul [root@localhost init.d]#chkconfig --add mysqlmul
Execute service: As a result, you can see that there is no mysql environment variable
[root@localhost init.d]# service mysqlmul start /sbin:/usr/sbin:/bin:/usr/bin
1. Add export PATH=/usr/local/mysql/bin:$PATH
## to the service just set in /etc/init.d/xxx #Note:
When putting a shell script into the service, you need to set the PATH and other environments. Use of environment variable files in service filesTest preparationc Test programThe contents of LogTest.cpp are as follows:// 测试代码 #include <stdio.h> #include <iostream> using namespace std; int main(int argc, const char* argv[]) { int size = 0; // 解析传入参数(argc和argv),代码略 // ... cout << size <<endl; while(1); return 0; }
service file
LogTest.service file[Unit] Description=LogTest After=network.target [Service] Type=simple EnvironmentFile=-/etc/sysconfig/LogTest ExecStart=/usr/local/MyTest/LogTest -s ${TESTSIZE} ExecStop=/bin/kill -s QUIT $MAINPID StandardOutput=syslog StandardError=syslog SyslogIdentifier=LogTest [Install] WantedBy=multi-user.target
Environment variable file
Environment variable file LogTest is placed in /etc/sysconfig /Under contents.# 环境变量文件,可根据需要新增 TESTSIZE=10
cp LogTest /usr/local/MyTest/2) Log configuration For log related configuration, please view https://blog. csdn.net/www_dong/article/details/128053496. 3) Service file loading
# 文件拷贝 cp LogTest.service /usr/lib/systemd/system # 文件加载 systemctl daemon-reload # 程序启动 systemctl start LogTest # 查看进程是否启动成功 ps -aux | grep LogTest
# 进入日志所在目录 cd /var/log # 查看LogTest.log cat LogTest.log
The above is the detailed content of How to solve the problem that Linux service cannot use system environment variables. For more information, please follow other related articles on the PHP Chinese website!