рдмреИрд╢ рдиреМрдХрд░реА рдХреА рдХрддрд╛рд░

рд╢реБрдн рджрд┐рди, habrazhiteli рдФрд░ habrachitateli!
рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдерд╛: рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдФрд░ рдпрджрд┐ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдЗрд╕рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдиреНрдп рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕ рдкрд░ рдХрд╛рдлреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд┐рд╣рд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ (рдмреБрд░реНрдЬреБрдЖ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рдЦреАрдВрдЪрддреА рд╣реИ рдЬреЛ рд╕рд┐рд░реНрдл рдПрдХ рдЖрдИрдкреА рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ)ред
рдиреМрдХрд░реА рдХреА рдХрддрд╛рд░ (FIFO) рддреБрд░рдВрдд рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖ рдЧрдИ, рдЬрд┐рд╕реЗ рдореИрдВ рдмреИрд╢ (рдЬреЛ рдЕрднреА рддрдХ рджреВрд░ рд╣реИ) рдкрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдореИрдВ рдПрдХ рд╣реИрдмреНрд░рдХреИрдЯ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред

рд▓реЗрдЦ рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдмреИрд╢ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ FIFO рдкрддреНрд░ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рд╣рдо рдЯреАрдореЛрдВ рдХреА рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдХрддрд╛рд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреА рд╣реИ рд╡рд╣ jobq.lock рд▓реЙрдХрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧреАред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдЧрд▓реЗ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╣ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд▓рд╛рдЗрди рд╕реЗ рдХреБрдЫ рднреА рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдзрд┐ рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХрддрд╛рд░ рдФрд░ рд╕реНрдерд╛рди рдмрдирд╛рдПрдБ:
umask 077 mkdir -p ~/jobs/var mkfifo ~/jobs/var/jobq mkdir -p ~/jobs/bin 

рдмрд┐рди рдореЗрдВ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╣реЛрдВрдЧреА рдЬреЛ рдЪрд▓реЗрдВрдЧреА, рдФрд░ var рдореЗрдВ - рдХрддрд╛рд░ рд╕реЗ рдЬреБрдбрд╝реА рд╣рд░ рдЪреАрдЬ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, jobq рдХрддрд╛рд░ рд╣реА , рд╕рд╛рде рд╣реА jobq.lock рдлрд╝рд╛рдЗрд▓- рд▓реЙрдХрд░ )ред
рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓, рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝реЛрд▓реНрдбрд░ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ ~ / рдХрд╛рд░реНрдп / рдЗрдирдкреБрдЯ , ~ / рдХрд╛рд░реНрдп / рдХрд╛рд░реНрдп рдФрд░ ~ / рдХрд╛рд░реНрдп / рдЖрдЙрдЯрдкреБрдЯ рд╣реИ

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ 3 рдереЗ:
  1. рдЬреЛ рдирдП рдбреЗрдЯрд╛ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
  2. рдЬреЛ рдХрддрд╛рд░ рдореЗрдВ рдирдпрд╛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ (рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд▓рдЧ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ - рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ)
  3. рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрддрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рд╕реЗ рдиреМрдХрд░рд┐рдпрд╛рдВ рдЪрд▓рд╛рддрд╛ рд╣реИ


рдЪрд▓рд┐рдП рдХреНрд░рдорд╛рдВрдХрди рдХреНрд░рдо рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ ( $ HOME / jobs / bin / mover.sh )
 #!/bin/bash # ,         #       FILES_LIST=( $(ls $HOME/jobs/Input) ) #       for raw_file in ${FILES_LIST[@]}; do mv $HOME/jobs/Input/$raw_file $HOME/jobs/Work/ #   ,  .  ,     ,      filename=$(basename $raw_file) #      name=${filename%.*} #         mkdir -p $HOME/jobs/Output/$name #    #2,      . #           #     $HOME/complicated_task.sh -i $HOME/jobs/$raw_file -o $HOME/jobs/Output/$name >> $HOME/jobs/Output/$name/task.log $HOME/jobs/submit.sh "$HOME/complicated_task.sh -i $HOME/jobs/$raw_file -o $HOME/jobs/Output/$name >> $HOME/jobs/Output/$name/task.log" done 

рдЗрд╕ рд▓рд┐рдкрд┐ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ!) рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред
рдПрдХ рдХреНрд░реЗрд╕реНрдЯрдм рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдмрдЪрд╛ рд╣реИред рд╣рдо рд╣рд░ рдорд┐рдирдЯ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ
 crontab -e * * * * * $HOME/jobs/bin/mover.sh 


рд╣рдо рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рдиреМрдХрд░рд┐рдпреЛрдВ ( $ HOME / jobs / bin / submit.sh ) рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░реЗрдЧреА :
 #!/bin/bash # submit.sh. #      #     ,     , #   ,       . #        # (    &  ) echo $* > $HOME/jobs/var/jobq & 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рдЯрдХрд╛рдПрдЧреА рдФрд░ рдкрд┐рдЫрд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧреАред рдпрд╣ рдХреНрдпреЛрдВ рд░рдЦрд╛? рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рднреЗрдЬреЗрдВред

рдФрд░, рдЕрдВрдд рдореЗрдВ, рдЕрд╡рд╕рд░ рдХрд╛ рдирд╛рдпрдХ, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдХрддрд╛рд░ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рд╕реЗ рдХрд╛рд░реНрдп рдЪрд▓рд╛рддрд╛ рд╣реИ ( $ HOME / jobs / bin / execute.sh ):
 #!/bin/sh # execute.sh #         # jobq.lock - , ,      #    ,     test -f $HOME/jobs/var/jobq.lock && exit 0 #    ,     touch $HOME/jobs/var/jobq.lock || exit 2 #   read job < $HOME/jobs/var/jobq #       : date >> $HOME/jobs/jobs.log echo " RUN: $job" >> $HOME/jobs/jobs.log echo "" >> $HOME/jobs/jobs.log eval $job #   status=$? #  ,   rm -f $HOME/jobs/var/jobq.lock || exit 3 #     ,      exit $status 


рдФрд░ рдлрд┐рд░, рд╣рдорд╛рд░реЗ рджреЛрд╕реНрдд crontab 'y рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдБ:
 crontab -e * * * * * $HOME/jobs/bin/execute.sh 


рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ - рдЕрдЪрд╛рдирдХ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In151684/


All Articles