Maison > Article > Opération et maintenance > Comment résoudre le problème selon lequel le service Linux ne peut pas utiliser les variables d'environnement système
Lors d'une installation multi-instance de MySQL auparavant, l'installation a réussi et Linux a également pu démarrer avec succès, mais support-files/mysqld_multi.server a été déplacé vers ; /etc /init.d/ et la configuration du démarrage (chkconfig xxx activé) ont échoué ;
a trouvé le problème et a commencé à le résoudre, et a constaté que le service xxx start ne peut pas démarrer plusieurs instances de mysql, mais mysqld_multi start peut être utilisé;puis Après plusieurs tentatives, j'ai découvert que la variable d'environnement mysql définie par /etc/profile peut être imprimée dans un environnement normal, mais que la variable d'environnement mysql ne peut pas être imprimée dans le service créé par le shell
My ; /etc/frofile :
export PATH=/usr/local/mysql/bin:$PATH
Exécution : vous pouvez voir qu'il existe un jeu de variables d'environnement mysql
[root@localhost init.d]# echo $PATH /usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Ensuite, nous définissons un script système V
[root@localhost init.d]# vi /etc/init.d/mysqlmul #!/bin/bash #chkconfig: - 75 15 #description: test
Donnez des autorisations et définissez-le sur service
[root@localhost init.d]#chmod +x /etc/init.d/mysqlmul [root@localhost init.d]#chkconfig --add mysqlmul
Exécuter le service : en tant que résultat, vous pouvez voir qu'il n'y a pas de variable d'environnement mysql
[root@localhost init.d]# service mysqlmul start /sbin:/usr/sbin:/bin:/usr/bin
1. Ajoutez export PATH=/usr/local/mysql/bin:$PATH
au service que vous venez de définir dans /etc/init.d. /xxx Lorsque le script est placé dans le service, l'environnement tel que PATH doit être défini.
Utilisation du fichier de variable d'environnement dans le fichier de servicePréparation du testProgramme de test c++Le contenu de LogTest.cpp est le suivant :// 测试代码 #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; }
fichier de service
Fichier LogTest.service
[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
Fichier de variable d'environnement
Le fichier de variable d'environnement LogTest est placé dans le répertoire /etc/sysconfig/.
# 环境变量文件,可根据需要新增 TESTSIZE=10Processus de test1) Compilez le programme de test c++ et copiez le programme de test dans le répertoire /usr/local/MyTest/.
cp LogTest /usr/local/MyTest/
Pour la configuration liée au journal, veuillez consulter https://blog.csdn.net/www_dong/article/details/128053496. 3) Chargez le fichier de service2) Configuration du journal
# 文件拷贝 cp LogTest.service /usr/lib/systemd/system # 文件加载 systemctl daemon-reload # 程序启动 systemctl start LogTest # 查看进程是否启动成功 ps -aux | grep LogTest4) Consultez le journal du programme LogTest
# 进入日志所在目录 cd /var/log # 查看LogTest.log cat LogTest.logRemarque : le journal imprime 10, indiquant que l'ensemble du processus est réussi
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!