2017-09-11 35 views
-3

每個操作系統都有圖書館。他們中的大多數讓你有機會做更多的礦石來編寫更少的代碼。 inti函數是這些圖書館之一,但...如何使用init函數?

什麼是init函數以及如何使用它?

+0

'INIT-functions'是SysV初始化,這是一般來說代碼的陳舊塊,它不應該被用於新發展的神器。現代最佳實踐是使用適當的過程監督系統(systemd,upstart,runit,launchd等) - *不是傳統的「init腳本」。 –

+0

請參閱http://smarden.org/runit/runscripts.html上的示例運行腳本 - 您會注意到它們幾乎全部在五行*總計*之下,因此不需要任何類型的庫支持。其他過程監督系統的配置可能不那麼簡單,但它們使init函數過時並且不相關是普遍的。 –

回答

-1

在Linux中,您可以使用init函數以統一的方式管理deamons和協議,並使用有色的&。這比處理每一個答案更容易處理。

它以名稱init-functions存儲在/lib/lsb/中。

這裏有一個例子:

#!/bin/bash 
# Script by Amir Boudani      ©Amir Boudani 
source /lib/lsb/init-functions     # Importing init-functions - log messages 
           # Use for importing other scripts ore else: "source"/"." 
           # Use at the beginning of the path "/" to say that the path has to start from the root directory 

log_success_msg "Starting test.sh" || true 
echo 
log_action_msg "Info message" || true    # Info message 
log_success_msg "Checking Files" || true   # Success message 
log_warning_msg "Free storage is under 10%" || true   # Warning message 
log_failure_msg "Starting unknown script files" || false # Failure message 

echo 
log_end_msg 0 || true      # End message - success - resetting the line above -> log_daemon_msg 
log_end_msg 1 || true      # End message - failure - resetting the line above -> log_daemon_msg 
log_end_msg 255 || true      # End message - warning - resetting the line above -> log_daemon_msg 
echo 
log_progress_msg "copying file 2123"    # One of the line resetting comands - progress 
echo 
echo 

log_daemon_msg "Integrate files" || true 
sleep 2 
log_end_msg 0 || true 

log_daemon_msg "Checkt if the directory 4234 exist" || true 
sleep 2 
log_end_msg 1 || true 

log_daemon_msg "Storage space checking " || true 
sleep 2 
log_end_msg 255 || true 
echo 
echo 
log_daemon_msg "Checking Filestorage" || true 
sleep 1 
log_progress_msg "Checking File 1" || true 
sleep 1 
log_progress_msg "Checking File 2" || true 
sleep 1 
log_progress_msg "Checking File 3" || true 
sleep 1 
log_progress_msg "Checking File 4" || true 
sleep 1 
log_end_msg 0 || true 

echo 

#---------------------------------------------------------------# Method 1 - not working for commands that are self responding 

$checker       # A variable that doesn't exist. To trigger an error code 
log_daemon_msg "Check if the last command was an Error" || true 
if [ "$?" -eq "0" ]       # "$?" is the errorcode number of the last command. | 0 = There was no Errors | 1 = Error code 1 
then 
    log_end_msg 0 || true 
else 
    log_end_msg 1 || true 
    echo "  There went something wrong. see log" 
fi 

#---------------------------------------------------------------# A way to check if a directory exist 

#if [ -d "/opt/scripts" ]     # Check if directory exist - example at this line: if directory /opt/scripts exist 
           # -d = check if the following directory exitst 
           # -a = check if the following file exsist 
#if [ ! -d "/opt/scripts" ]     # ! is a negativ operator - example at this line: if directory /opt/scripts NOT exist 
           # You can actually use the ! operator anywhere 

#---------------------------------------------------------------# Method 2 - working for self responding commands. but the log_daemon_msg ist not working so we take log_succes/warning/failure_msg 

echo 
echo "type in: false/true/(nothing)" 
read var1 
case $var1 in       # Check if variable var1 is true 
    true) 
     log_success_msg "Check if var1 is true" || true 
     ;; 

    false) 
       log_warning_msg "Check if var1 is true" || true 
       echo -e "  \e[33mvar1 is false.\e[0m" 
       ;; 

    *) 
      log_failure_msg "Check if var1 is true" || true 
      echo -e "  \e[31mthere was no input in the read statment.\e[0m" 
     ;; 
esac 
相關問題