Tôi gặp sự cố khi tệp tệp đơn vị dịch vụ systemd chạy chính xác khi máy chủ khởi động lại. Máy chủ này là bản cài đặt CentOS 7.0.1406 mới. Tôi đang cố gắng thiết lập nó với nhiều phiên bản Apache httpd. Trên bản cài đặt CentOS cũ hơn, tôi đã có các phiên bản httpd hoạt động tốt và vì vậy bây giờ tôi đang cố gắng chuyển các cấu hình đó sang CentOS mới sử dụng systemd.
Tôi có thể kích hoạt dịch vụ, khởi động nó, khởi động lại và dừng nó mà không gặp vấn đề gì. Khi tôi thực hiện khởi động lại, nó báo "Không có tệp hoặc thư mục như vậy". Nếu tôi kích hoạt dịch vụ, mọi thứ sẽ hoạt động trở lại cho đến lần khởi động lại tiếp theo.
Tệp dịch vụ:
[Unit]
Description=Apache web server instance apache01
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/data/apacheinstances/apache01/logs/httpd.pid
ExecStart=/data/apacheinstances/apache01/bin/apachectl start
ExecStop=/data/apacheinstances/apache01/bin/apachectl stop
ExecReload=/data/apacheinstances/apache01/bin/apachectl reload
PrivateTmp=true
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
Làm thế nào tôi kích hoạt nó:
$ sudo systemctl enable /data/apacheinstances/apache01/bin/apache01.service
ln -s '/data/apacheinstances/apache01/bin/apache01.service' '/etc/systemd/system/multi-user.target.wants/apache01.service'
ln -s '/data/apacheinstances/apache01/bin/apache01.service' '/etc/systemd/system/apache01.service'
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: inactive (dead)
Làm thế nào tôi bắt đầu nó:
$ sudo systemctl start apache01
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: active (running) since Wed 2014-10-08 14:37:56 PDT; 13s ago
Process: 1740 ExecStart=/data/apacheinstances/apache01/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1746 (httpd)
CGroup: /system.slice/apache01.service
+-1746 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1747 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/error_log-%Y%m
+-1748 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/access_log-%Y%m
+-1749 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1750 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1751 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
Oct 08 14:37:56 server105 apachectl[1740]: Starting apache01: [ OK ]
Oct 08 14:37:56 server105 systemd[1]: PID file /data/apacheinstances/apache01/logs/httpd.pid not readable (yet?) after start.
Oct 08 14:37:56 server105 systemd[1]: Started Apache web server instance apache01.
Làm thế nào tôi khởi động lại nó:
$ sudo systemctl restart apache01
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: active (running) since Wed 2014-10-08 14:38:40 PDT; 12s ago
Process: 1836 ExecStop=/data/apacheinstances/apache01/bin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 1844 ExecStart=/data/apacheinstances/apache01/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1850 (httpd)
CGroup: /system.slice/apache01.service
+-1850 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1851 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/error_log-%Y%m
+-1852 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/access_log-%Y%m
+-1853 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1855 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1856 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
Oct 08 14:38:40 server105 apachectl[1844]: Starting apache01: [ OK ]
Oct 08 14:38:40 server105 systemd[1]: PID file /data/apacheinstances/apache01/logs/httpd.pid not readable (yet?) after start.
Oct 08 14:38:40 server105 systemd[1]: Started Apache web server instance apache01.
Làm thế nào tôi dừng nó lại:
$ sudo systemctl stop apache01
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: inactive (dead) since Wed 2014-10-08 14:39:44 PDT; 12s ago
Process: 1940 ExecStop=/data/apacheinstances/apache01/bin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 1844 ExecStart=/data/apacheinstances/apache01/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1850 (code=exited, status=0/SUCCESS)
Oct 08 14:38:40 server105 apachectl[1844]: Starting apache01: [ OK ]
Oct 08 14:38:40 server105 systemd[1]: PID file /data/apacheinstances/apache01/logs/httpd.pid not readable (yet?) after start.
Oct 08 14:38:40 server105 systemd[1]: Started Apache web server instance apache01.
Oct 08 14:39:44 server105 systemd[1]: Stopping Apache web server instance apache01...
Oct 08 14:39:44 server105 apachectl[1940]: Stopping apache01: [ OK ]
Oct 08 14:39:44 server105 systemd[1]: Stopped Apache web server instance apache01.
Trạng thái sau khi khởi động lại:
$ sudo systemctl status apache01
apache01.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Oct 08 14:44:58 server105 systemd[1]: Cannot add dependency job for unit apache01.service, ignoring: Unit apache01.service failed to load: No such file or directory.
Làm thế nào tôi có thể bắt đầu và bắt đầu nó:
$ sudo systemctl reenable /data/apacheinstances/apache01/bin/apache01.service
rm '/etc/systemd/system/apache01.service'
rm '/etc/systemd/system/multi-user.target.wants/apache01.service'
ln -s '/data/apacheinstances/apache01/bin/apache01.service' '/etc/systemd/system/multi-user.target.wants/apache01.service'
ln -s '/data/apacheinstances/apache01/bin/apache01.service' '/etc/systemd/system/apache01.service'
$ sudo systemctl start apache01
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: active (running) since Wed 2014-10-08 14:52:20 PDT; 5s ago
Process: 1737 ExecStart=/data/apacheinstances/apache01/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1743 (httpd)
CGroup: /system.slice/apache01.service
+-1743 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1744 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/error_log-%Y%m
+-1745 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/access_log-%Y%m
+-1746 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1747 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1748 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
Oct 08 14:52:20 server105 apachectl[1737]: Starting apache01: [ OK ]
Oct 08 14:52:20 server105 systemd[1]: PID file /data/apacheinstances/apache01/logs/httpd.pid not readable (yet?) after start.
Oct 08 14:52:20 server105 systemd[1]: Started Apache web server instance apache01.
Tôi không chắc tại sao nó hoạt động mà không gặp sự cố trước khi khởi động lại nhưng thất bại sau đó. Nếu tôi không thực hiện được, tôi sẽ tiếp tục gặp lỗi tương tự về "Không có tệp hoặc thư mục như vậy".
Tôi đã cố gắng nghiên cứu chức năng ghi nhật ký trong systemd để xác định tệp hoặc thư mục nào nó không thể tìm thấy nhưng đã rút ra một khoảng trống.
Có ai khác có kinh nghiệm loại hành vi này trước đây?
systemd
sẽ cần phải đọc các .service
tập tin để phân tích cú pháp After=remote-fs.target
. systemd
bắt đầu sớm trong quá trình khởi động và đọc tất cả các .service
tệp (hoặc liên kết tượng trưng đến các tệp này). Tại thời điểm này, .service
tệp của bạn nằm trên một hệ thống tệp từ xa chưa được kết nối, do đó systemd
phàn nàn rằng nó không thể tìm thấy nó khi nó cố gắng theo liên kết tượng trưng /etc/systemd
. Nó thậm chí còn After
chưa được tuyên bố. Điểm mấu chốt là tất cả .service
các tệp cần phải nằm trên một hệ thống tệp có thể truy cập rất sớm trong quá trình khởi động.
/etc/systemd/system/
và xem vấn đề còn tồn tại không.