Làm thế nào tôi có thể bắt đầu một dịch vụ systemd chỉ sau khi mysql đã bắt đầu?


14

Tôi đang làm việc trên một dự án là một Máy chủ Email đơn. Tôi đã thử thêm một dịch vụ vào systemd để nó tự khởi động trong khi khởi động nhưng tôi gặp sự cố.

Tôi đã tạo tập lệnh và thêm vào /lib/systemd/system/emailserver.servicevà sau đó chạy ln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service.

Sau đó tôi đã thực hiện systemd reload-daemontheo systemctl start emailserver.servicevà sau đó khi tôi chạy ps -ef |grep -i emailservertôi có thể thấy nó mono EmailServer.exeđang chạy, tất cả đều trông tốt cho đến nay.

Tuy nhiên, khi tôi khởi động lại máy chủ trong /var/log/messagestệp thì nó chứa thông báo lỗi sau

Jul 16 19:41:02 dev-server systemd[1]: emailserver.service holdoff
time over, scheduling restart. Jul 16 19:41:02 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:03 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:04 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:04 dev-server systemd[1]: emailserver.service start request
repeated too quickly, refusing to start.

Trong tập lệnh emailerver.service của tôi, tôi có đoạn sau

[Unit]
Description=Boardies Email Server Startup Script

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

Tôi đang sử dụng OpenSuse 12.1

Tôi đang làm gì sai, cảm ơn vì sự giúp đỡ của bạn.

CẬP NHẬT Tôi đã tìm ra nguyên nhân khiến chương trình ngừng hoạt động khi khởi động nhưng tôi không chắc làm thế nào tôi có thể khắc phục vấn đề này. Chương trình của tôi dựa trên cơ sở dữ liệu MySQL và tôi nghĩ chương trình của tôi đang khởi động trước khi MySQL bắt đầu, làm cách nào để dịch vụ của tôi không tải cho đến khi MySQL khởi động.


Bạn nên xem qua một số ví dụ, ví dụ: en.gentoo-wiki.com/wiki/Systemd hoặc wiki.archlinux.org/index.php/Systemd/Service
Ulrich Dangel

Câu trả lời:


29

Thêm vào After=mysql.servicetệp dịch vụ của bạn (hoặc thay đổi nó thành tên dịch vụ chính xác), ví dụ:

[Unit]
Description=Boardies Email Server Startup Script
After=mysql.service

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

Xin lưu ý rằng bạn không phải đặt tệp dịch vụ của mình vào / lib / systemd / system, đây là tệp do người dùng cung cấp và bạn chỉ nên sao chép nó vào / etc / systemd / system.

Để có danh sách tất cả các tệp dịch vụ, bạn có thể sử dụng systemctl list-unit-filesvà xác định tên chính xác cho dịch vụ cơ sở dữ liệu của mình (có thể là mysql.service hoặc mysqld.service)


chúng ta có thể có nhiều After=*.servicevà đặt hàng?
Ciasto piekarz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.