Điểm:2

Xây dựng PHP từ nguồn với trình điều khiển DataDirect ODBC tùy chỉnh, nhưng không thể tự động khởi động với systemd

lá cờ br

Tôi cần xây dựng PHP từ nguồn để sử dụng trình điều khiển ODBC khách hàng này. Tôi đã theo dõi các cuộc kiểm tra này: https://www.progress.com/tutorials/odbc/using-php và mọi thứ (bao gồm cả trình điều khiển ODBC) đều hoạt động tốt khi tôi khởi động apache theo cách thủ công với /usr/local/apache2/bin/apachectl bắt đầu Nhưng khi tôi cố khởi động apache với systemd, trình điều khiển ODBC không còn hoạt động nữa.

Tôi đã tạo tập tin này: /usr/lib/systemd/system/httpd.service

[Đơn vị]
Mô tả=Máy chủ web Apache
Sau=mạng.đích từ xa-fs.đích nss-lookup.đích

[Dịch vụ]
Loại = rẽ nhánh
PIDFile=/usr/local/apache2/logs/httpd.pid
ExecStart=/usr/local/apache2/bin/apachectl bắt đầu
ExecStop=/usr/local/apache2/bin/apachectl-dừng duyên dáng
ExecReload=/usr/local/apache2/bin/apachectl duyên dáng
RiêngTmp=true
Giới hạnNOFILE=vô cùng

[Cài đặt]
WantedBy=multi-user.target

Tôi gặp lỗi sau trong tệp php của mình khi khởi động apache với systemd:

odbc_connect(): Lỗi SQL: [DataDirect][ODBC lib] Trình quản lý trình điều khiển Không tìm thấy tệp tin nhắn. Vui lòng kiểm tra giá trị của InstallDir trong odbc.ini., Trạng thái SQL IM002 trong SQLConnect

InstallDir được đặt chính xác trong tệp odbc.ini của tôi: nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Tôi không gặp lỗi này khi khởi động apache với khởi động apachectl thủ công. Bất kỳ đề nghị về làm thế nào để khắc phục điều này?

Barry Ralphs avatar
lá cờ br
Tôi đã nhận được điều này, tôi không chắc phải làm gì với nó: `type=ANOM_ABEND msg=audit(1624733159.706:196): auid=1000 uid=48 gid=48 ses=1 pid=1589 comm="httpd" reason="vi phạm bộ nhớ" sig=11 type=ANOM_ABEND msg=audit(1624733159.706:197): auid=1000 uid=48 gid=48 ses=1 pid=1591 comm="httpd" reason="vi phạm bộ nhớ" 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" tên máy chủ=? thêm =? thiết bị đầu cuối =? res=thành công'`
Michael Hampton avatar
lá cờ cz
Chà, đó chỉ là một sự cố "Lỗi phân đoạn" cũ đơn giản. Có lẽ mã này không phải là tất cả đáng tin cậy?
Barry Ralphs avatar
lá cờ br
Bạn đang đề cập đến mã xây dựng/mã nguồn của Apache hay mã PHP? Mã PHP hoạt động tốt khi khởi động Apache theo cách thủ công.
Michael Hampton avatar
lá cờ cz
Không có cách nào để biết, trừ khi bạn có một kết xuất cốt lõi mà bạn có thể phân tích.
ezra-s avatar
lá cờ ru
Bạn đang biên dịch odbc cho PHP, không phải Apache, có một sự khác biệt lớn. Tại sao bạn không thử và xem loại cấu hình nào bạn đang cố gắng khởi động Apache sau đó? Trong mọi trường hợp, bạn đã thử chạy php trong php-fpm và sử dụng Apache để ủy quyền các yêu cầu tới nó mà không thử sử dụng mod_php chưa? Tôi nghĩ chỉ riêng điều đó thôi cũng sẽ giúp bạn hiểu rõ hơn những gì bạn đang cố gắng đạt được và vấn đề thực sự của bạn là gì.
Barry Ralphs avatar
lá cờ br
Cảm ơn @ezra-s, một ý kiến ​​hay, tôi luôn gộp Apache & PHP lại với nhau.Bạn có thể làm rõ ý của mình bằng cách kiểm tra loại cấu hình nào bạn đang cố khởi động Apache không? Làm thế nào tôi sẽ làm điều đó? PHPINFO() của tôi hiển thị: ` './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
lá cờ cz
Rất tiếc, tôi đã phạm sai lầm khi không đọc liên kết đó về trình điều khiển ODBC cho đến bây giờ. Họ có nghiêm túc không? Môi trường họ chỉ định là 15 tuổi! Điều này là hoàn toàn không thể hỗ trợ. Có một số lý do cụ thể mà bạn cần sử dụng trình điều khiển ODBC cụ thể (và dường như đã lỗi thời từ lâu) này không?
Barry Ralphs avatar
lá cờ br
Cảm ơn @MichaelHampton, tôi đã không theo dõi phần xây dựng PHP5.1. Tôi đã xây dựng 7.4 để thay thế. Khách hàng của chúng tôi đang sử dụng phần mềm kế toán Deltek Vision được lưu trữ trên đám mây của Deltek. Rõ ràng, Deltek chỉ hỗ trợ trình điều khiển ODBC này để đọc dữ liệu từ đám mây của họ.
Michael Hampton avatar
lá cờ cz
Điều đó chắc chắn giới hạn các lựa chọn của bạn. Tôi đã xem xét nó nhiều hơn một chút và rõ ràng chỉ là hướng dẫn cụ thể đó đã 15 năm tuổi, phần mềm ít nhiều đã được cập nhật. Vì vậy, sau khi xem xét tin nhắn đó một chút, tôi có một sự nghi ngờ về vấn đề này. Bạn đã cung cấp các biến môi trường ODBCINI và ODBCINST như thế nào?
Barry Ralphs avatar
lá cờ br
Cảm ơn, tôi đã nhận thấy một cái gì đó mới. Nếu tôi tự chạy `sudo /usr/local/apache2/bin/apachectl`, tôi vẫn gặp lỗi ở trên, nhưng nếu tôi chuyển sang root và chạy `/usr/local/apache2/bin/apachectl` thì nó hoạt động tốt. Đây là điều khiến tôi nghĩ đó là vấn đề về quyền. Có cách nào để yêu cầu systemd bắt đầu apachectl với quyền root không?
Barry Ralphs avatar
lá cờ br
Về: ODBCINI và ODBCINST, tôi có tệp: `/etc/profile.d/odbc.sh` có: `ODBCINI=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC/odbc.ini xuất khẩu ODBCINI ODBCINST=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC/odbcinst.ini xuất ODBCINST` Là sysytemd không nhìn thấy chúng?
Barry Ralphs avatar
lá cờ br
Cảm ơn @MichaelHampton, tôi đã có thể tìm ra nó dựa trên gợi ý của bạn về các biến môi trường.
Điểm:1
lá cờ br

Tôi đã có thể giải quyết vấn đề của mình bằng cách thêm các dòng sau vào /usr/lib/systemd/system/httpd.service tập tin, dưới [Dịch vụ] tiết diện:

Môi trường="ODBCINST=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC/odbcinst.ini" Môi trường="ODBC_HOME=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC" Môi trường="ODBCINI=/opt/Progress/DataDirect/Hybrid_Data_Pipeline_for_ODBC/odbc.ini" Môi trường="TZ=America/Los_Angeles"

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.