systemctl enable, systemctl start से अलग है, कैसे?


16

मैं एक आर्क लिनक्स (नवीनतम, अद्यतित) बॉक्स चला रहा हूं, और बूट पर शुरू करने के लिए MySQL प्राप्त करने का प्रयास कर रहा हूं। Systemd पैकेज स्थापित होने के साथ ही मेरे पास systemctl उपलब्ध है, और जैसे मैं इस तरह की चीजें कर सकता हूं:

systemctl start mysqld.service
systemctl [stop|status|restart] mysqld.service

यह सब ठीक है, और महान काम करता है जब मैं मैन्युअल रूप से शुरू / बंद करना चाहता हूं, हालांकि, जब बूट पर शुरू करने के लिए इसे प्राप्त करने की बात आती है (सिस्टमएक्टल पर 'सक्षम' का उपयोग करके, मुझे कुछ बुरा आउटपुट मिलता है):

[root@rudivarch ~]# systemctl enable mysqld.service
Failed to issue method call: No such file or directory

जाहिर है, चूंकि अन्य कमांड बस ठीक काम करते हैं, मैं इससे गंभीर रूप से उलझन में हूं और यह पता लगाने की कोशिश करते हुए एक अच्छा खर्च किया है ... systemctl स्टेटस इसे आउटपुट करता है:

[root@rudivarch ~]# systemctl status mysqld.service
mysqld.service
     Loaded: loaded (/etc/rc.d/mysqld)
     Active: inactive (dead) since Tue, 31 Jan 2012 15:32:28 +0000; 1min 25s ago
    Process: 589 ExecStop=/etc/rc.d/mysqld stop (code=exited, status=0/SUCCESS)
    Process: 257 ExecStart=/etc/rc.d/mysqld start (code=exited, status=0/SUCCESS)
    CGroup: name=systemd:/system/mysqld.service

किसी के पास कोई विचार है कि 'सक्षम' काम क्यों नहीं करता है?

जवाबों:


19

mysqld.serviceएक "आभासी" इकाई है - यह फाइलसिस्टम पर मौजूद नहीं है, यह सिस्टेम की संगतता परत का सिर्फ एक हिस्सा है। आप इसे शुरू कर सकते हैं और systemd विरासत /etc/rc.d/mysqldइनसस्क्रिप्ट को चलाएगा , लेकिन आप इसे नहीं कर सकते systemctl enableक्योंकि आपको एक वास्तविक .serviceफ़ाइल की आवश्यकता होती है जिसे उचित स्थान पर सिमिलिंक किया जा सकता है।

आप स्वयं ऐसी इकाई लिख सकते हैं और इसमें डाल सकते हैं /etc/systemd/system/mysqld.service:

[यूनिट]
विवरण = MySQL सर्वर
= Network.target के बाद

[सेवा]
ExecStart = / usr / bin / mysqld --defaults-file = / etc / mysql / my.cnf --datadir = / var / lib / mysql --socket = / var / run / mysqld / mysqld.sock
उपयोगकर्ता = mysql
समूह = mysql
WorkingDirectory = / usr

[इंस्टॉल]
WantedBy = multi-user.target

systemctl daemon-reloadबनाने / संशोधित करने के बाद चलाएँ ।


वैकल्पिक रूप से, आप initscripts-systemdपैकेज को स्थापित कर सकते हैं , जिसमें arch-daemons.targetस्वचालित रूप से परिभाषित सेवाओं के लिए शामिल है rc.conf। हालाँकि, यह पैकेज जल्द ही खत्म हो सकता है, और उपयोग में आने वाली प्रणाली के लिए देशी विन्यास फाइल रखना हमेशा बेहतर होता है।


धन्यवाद! मैंने वास्तव में अपना खुद का mysqld.service लिखा था जो कल बहुत ही निकट से मिलता-जुलता है, लेकिन ExetStart / ExecStop के लिए /etc/rc.d/mysqld start / stop से होकर गुजरता है। स्वीकार किया जाता है, मेरे संस्करण को किसी और के पाए जाने की स्थिति में भी पोस्ट करेगा! धन्यवाद
रूडी Visser

3

@ ग्रैविटी का उत्तर सही है और शायद इससे बेहतर है, लेकिन मैंने इसे कल मूल रूप से rc.d.

/lib/systemd/system/mysqld.service

[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.d/mysqld start
ExecStop=/etc/rc.d/mysqld stop

[Install]
WantedBy=multi-user.target

2

नोटा नेने: याद रखें कि मेजबान-विशिष्ट इकाई फाइलों को अंडर /etc/systemd/system/और नॉट डालें /lib/systemd/system/

उत्तरार्द्ध डिस्ट्रो-विशिष्ट सामान के लिए है; पूर्व होस्ट-विशिष्ट सामान के लिए है जिसे आप स्वयं कॉन्फ़िगर करते हैं। यह क्रमशः /usr/bin/बनाम की तरह /usr/local/bin/है।

इसलिए जब तक एक पैकेज अपने द्वारा (के तहत /lib/systemd/system/) यूनिट फाइलें स्थापित नहीं करता है, तब तक अपना स्वयं का "कस्टम" सामान नीचे रखें /etc/systemd/system/


1
यह वास्तव में उनके सवाल का जवाब नहीं है। यह @ रुडी के जवाब के लिए एक टिप्पणी की तरह लग रहा है।
22

0

सक्षम करने के लिए स्टार्टअप के स्टार्टअप पर "इकाई" उर्फ ​​डेमन उर्फ ​​सेवा को सक्रिय करना है systemd

OpenSUSE:

# systemctl list-units --all | grep sql
mysql.service             loaded inactive dead          LSB: Start the MySQL database 
(good)

# systemctl enable mysql.service
mysql.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysql on
insserv: Service localfs has to exists for service vmware-USBArbitrator
insserv: Service network is missed in the runlevels 2 to use service vmware
Warning: unit files do not carry install information. No operation executed.

(it actually redirects to old chkconfig/sysvinit and that corrects init databases)

# systemctl start mysql.service

(no output)

# systemctl status mysql.service
mysql.service - LSB: Start the MySQL database server
          Loaded: loaded (/etc/init.d/mysql)
          Active: active (running) since Tue, 31 Jan 2012 20:07:52 +0100; 5s ago
         Process: 999999 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
          CGroup: name=systemd:/system/mysql.service
                  ├ 999999 /bin/sh /usr/bin/mysqld_safe --mysqld=mysqld --user=mysql...
                  └ 999999 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql...

(sort of runs)

हां, मैं इसे समझता हूं, और mysqld एक डेमन / सेवा है जिसे मैं स्टार्टअप पर चलाना चाहता हूं। यह मेरी बात है, यह शुरू / रुकता है, लेकिन "सक्षम" नहीं होगा।
रूडी विसेर

0

अपने FC15 सिस्टम पर, जब मैंने 'systemctl enable mysqld.service' चलाया, तो यह स्वचालित रूप से वापस आ गया:

mysqld.service एक मूल सेवा नहीं है, जो / sbin / chkconfig पर पुनर्निर्देशित हो। निष्पादित / sbin / chkconfig mysqld पर

इसलिए दौड़ने का प्रयास करें: /sbin/chkconfig mysqld on


0

यदि आपको मिल गया है ... अपनी सेवा इकाई को सक्षम करते समय, इसे / etc / systemd / system पर कॉपी करें

Failed to issue method call: No such file or directory

अपनी सेवा इकाई को सक्षम करने के लिए, नीचे जोड़ें ... ताकि आप सिस्टम mysqld.service को सक्षम कर सकें (प्रत्येक उपयोगकर्ता के नामस्थान में इसे सक्षम करें)

[Install]
WantedBy=multi-user.target

चीयर्स, सुजातांग इटलॉग

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.