Puncte:2

PHP construit din sursă cu drivere DataDirect ODBC personalizate, dar nu poate porni automat cu systemd

drapel br

Trebuie să construiesc PHP din sursă pentru a utiliza driverele ODBC ale acestui client. Am urmat aceste verificări: https://www.progress.com/tutorials/odbc/using-php și totul (inclusiv driverul ODBC) funcționează bine când pornesc manual apache cu /usr/local/apache2/bin/apachectl start Dar când încerc să pornesc apache cu systemd, driverele ODBC nu mai funcționează.

Am creat acest fișier: /usr/lib/systemd/system/httpd.service

[Unitate]
Descriere=Server web Apache
După=network.target remote-fs.target nss-lookup.target

[Serviciu]
Tip = bifurcare
PIDFile=/usr/local/apache2/logs/httpd.pid
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl graceful-stop
ExecReload=/usr/local/apache2/bin/apachectl grațios
PrivateTmp=adevărat
LimitNOFILE=infinit

[Instalare]
WantedBy=multi-user.target

Primesc următoarea eroare în fișierul meu php când pornesc apache cu systemd:

odbc_connect(): Eroare SQL: [DataDirect][ODBC lib] Fișierul mesajului Driver Manager nu a fost găsit. Vă rugăm să verificați valoarea InstallDir în odbc.ini dvs., starea SQL IM002 în SQLConnect

InstallDir este setat corect în fișierul meu odbc.ini: introduceți descrierea imaginii aici

introduceți descrierea imaginii aici

Nu primesc această eroare când pornesc apache cu apachectl start manual. Orice sugestie despre cum să remediați acest lucru?

Barry Ralphs avatar
drapel br
Am primit asta, nu stiu sigur ce sa fac din el: `type=ANOM_ABEND msg=audit(1624733159.706:196): auid=1000 uid=48 gid=48 ses=1 pid=1589 comm="httpd" motiv="încălcarea memoriei" sig=11 type=ANOM_ABEND msg=audit(1624733159.706:197): auid=1000 uid=48 gid=48 ses=1 pid=1591 comm="httpd" motiv="încălcarea memoriei" sig=11 type=SERVICE_START msg=audit(1624733172.056:198): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=httpd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? adresa=? terminal=? res=succes'`
Michael Hampton avatar
drapel cz
Ei bine, aceasta este doar o veche accidentare „defecțiune de segmentare”. Poate că acest cod nu este chiar atât de fiabil?
Barry Ralphs avatar
drapel br
Te referi la codul de compilare/sursă al Apache sau la codul PHP? Codul PHP funcționează bine când porniți manual Apache.
Michael Hampton avatar
drapel cz
Nu ai cum să știi, decât dacă ai un depozit de miez pe care îl poți analiza.
ezra-s avatar
drapel ru
Compilezi odbc pentru PHP, nu Apache, există o mare diferență. De ce nu încercați să vedeți cu ce tip de configurație încercați să porniți Apache după aceea? În orice caz, ați încercat să rulați php în php-fpm și să utilizați Apache pentru a trimite cererile către acesta fără a încerca să utilizați mod_php? Cred că numai asta te-ar ajuta să înțelegi mai bine ce încerci să obții și care este cu adevărat problema ta.
Barry Ralphs avatar
drapel br
Mulțumesc @ezra-s, idee bună, pur și simplu pun mereu împreună Apache și PHP împreună.Poți clarifica ce vrei să spui verificând cu ce tip de configurație încercați să porniți Apache? Cum aș face asta? PHPINFO() meu arată: ` './configure' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-mysqli' '--with-openssl' '--with-bz2 ' '--with-zlib' '--with-zip' '--enable-mbstring' '--enable-ssl' '--prefix=/usr/local/php' '--with-custom-odbc= /opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC' `
Michael Hampton avatar
drapel cz
Hopa, tocmai am făcut greșeala de a nu citi acel link despre driverul ODBC până acum. Sunt serioși? Mediul pe care îl precizează ei are 15 ani! Acest lucru nu este în întregime suportabil. Există un motiv special pentru care trebuie să utilizați acest driver ODBC specific (și aparent învechit de mult timp)?
Barry Ralphs avatar
drapel br
Mulțumesc @MichaelHampton, nu am urmat partea despre construirea PHP5.1. Am construit 7.4 în schimb. Clientul nostru folosește software-ul de contabilitate Deltek Vision găzduit în cloud-ul Deltek. Aparent, Deltek acceptă acest driver ODBC doar pentru a citi datele din cloud.
Michael Hampton avatar
drapel cz
Asta vă limitează cu siguranță opțiunile. M-am uitat mai mult la el și se pare că acest tutorial are 15 ani, software-ul este mai mult sau mai puțin actualizat. Deci, după ce mă uit puțin la acel mesaj, am o suspiciune cu privire la problemă. Cum ați furnizat variabilele de mediu ODBCINI și ODBCINST?
Barry Ralphs avatar
drapel br
Multumesc, am observat ceva nou. Dacă rulez `sudo /usr/local/apache2/bin/apachectl` ca mine, încă primesc eroarea de mai sus, dar dacă folosesc swatch la root și rulez `/usr/local/apache2/bin/apachectl`, funcționează bine. Acesta este ceea ce mă face să cred că este o problemă de permisiuni. Există oricum să spuneți systemd să pornească apachectl ca root?
Barry Ralphs avatar
drapel br
Re: ODBCINI și ODBCINST, am fișierul: `/etc/profile.d/odbc.sh` care are: `ODBCINI=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC/odbc.ini export ODBCINI ODBCINST=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC/odbcinst.ini export ODBCNST` Systemd nu le vede?
Barry Ralphs avatar
drapel br
Mulțumesc @MichaelHampton, am putut să-mi dau seama pe baza sugestiei tale despre variabilele de mediu.
Puncte:1
drapel br

Am reușit să-mi rezolv problema adăugând următoarele rânduri la mine /usr/lib/systemd/system/httpd.service dosar, sub [Serviciu] secțiune:

Environment="ODBCINST=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC/odbcinst.ini" Environment="ODBC_HOME=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC" Environment="ODBCINI=/opt/Progress/DataHOME=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC" Environment="ODBCINI=/opt/Progress/DataHOME=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC" Environment="TZ=America/Los_Angeles"

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.