Tôi vừa nâng cấp từ CentOS 6.5 lên 7.0 và tôi không hài lòng lắm vì cái mới systemd
có lẽ đang gây ra cho tôi những vấn đề. Có vẻ như nó chỉ đơn giản là khởi động quá nhanh, khởi động các quá trình không đồng bộ và làm hỏng các phụ thuộc dịch vụ.
Ví dụ: tôi có một vài thiết lập tập lệnh crond
được kích hoạt sau khi khởi động lại:
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
Điều này dẫn đến tất cả các loại lỗi lạ (chỉ hiển thị một trong số chúng):
Warning: stream_socket_client(): unable to connect to tcp://192.168.20.4:4001
(Network is unreachable) in /root/scripts/check_gmail.php on line 137
ERROR: Network is unreachable (101)
Ở trên tôi đang viết cho một socket TCP. Nó là khá rõ ràng với tôi rằng crond
được bắt đầu trước khi mạng được khởi tạo đúng như là network is unreachable
.
Điều tương tự cũng xảy ra với Apache và MySQL (MariaDB). MySQL khá chậm khi khởi động (nhiều dữ liệu) có nghĩa là cả Apache và rất nhiều crond
tập lệnh khởi động của tôi đều bị lỗi vì cơ sở dữ liệu MySQL không chạy khi tập lệnh được gọi.
Tôi đã cố gắng thiết lập các phụ thuộc nhưng không có may mắn; Tôi đã nối network
và mysql
dịch vụ [Unit]
(như đã thấy systemctl list-dependencies
). Lý tưởng nhất là tất cả các dịch vụ đều đợi cho đến khi MySQL hoạt động:
vi /lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target network.service mysql.service
vi /lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=syslog.target auditd.service systemd-user-sessions.service time-sync.target network.service mysql.service
Khi khởi động với ở trên tôi nhận được các lỗi tương tự. Tôi cũng nhận được email trong mailq
khi mạng / DNS chưa sẵn sàng khi xử lý tập lệnh cron. Một vài phút sau khi khởi động, chúng được gửi chính xác.
Bất cứ ai cũng có thể giúp có được quyền này bằng cách đảm bảo các dịch vụ được sa thải theo đúng thứ tự? Có vẻ như rất sai khi nó khởi động quá nhanh và lý tưởng là nó đã làm theo cách cũ, "khởi chạy một serice ... chờ đợi ... tung ra một dịch vụ mới ... chờ đợi ... vân vân).
Xin lưu ý rằng tôi không chắc đó là systemd
vấn đề của tôi - đó chỉ là lý thuyết của tôi về những gì tôi có thể đọc từ mạng.
/etc/default/rc*
Requires=network.target
vào các đơn vị ở trên.
Requires=network.target
vào/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
? Tôi có thể trộn lẫn các hệ thống init của mình nhưng dường như tôi nhớ lại rằng điều khiển xem các tiến trình có chờ đợi nhau kết thúc hay không.