Tại sao chúng ta cần lệnh của trò chơi trên mạng tại Linux trong Linux?


38

Tôi đã nghiên cứu mã trong đó atlệnh được sử dụng. Tôi nhìn xung quanh và thấy rằng nó được sử dụng để thực hiện các công việc hàng loạt. Nó được sử dụng để sắp xếp công việc. Nó được đưa ra, như là đầu vào của nó, một lệnh và thời gian, tương đối hoặc tuyệt đối.

Vì vậy, câu hỏi đầu tiên của tôi là: tại sao atlệnh được sử dụng? Trong trường hợp nào người ta cần phải sử dụng at? Tôi đã gặp phải nó khi có một số mã script bash đang cố gắng gỡ cài đặt phần mềm và khi một số dịch vụ nền được khởi động lại.

Câu hỏi thứ hai của tôi: sự khác biệt giữa việc có bất kỳ lệnh nào được thực thi như một công việc hàng loạt và có một lệnh được thực thi khi gọi lệnh trực tiếp (hoặc trong subshell)?

Câu trả lời:


47

Câu trả lời của Bernhard là chính xác: trong các hệ thống nhiều người dùng, khả năng thực thi các chương trình nặng vào một số giờ vô duyên vào ban đêm đặc biệt thuận tiện, cho cả người nộp công việc và đồng nghiệp của mình. Nó là một phần của "chơi đẹp".

Tôi đã làm hầu hết bằng tiến sĩ. Tính toán theo cách này, kết hợp tập lệnh với lệnh tốt , làm giảm mức độ ưu tiên của công việc của tôi bất cứ khi nào người khác giữ máy bận, trong khi vẫn giữ nguyên khả năng hog tất cả tài nguyên hệ thống vào ban đêm.

Tôi đã sử dụng lệnh tương tự để kiểm tra xem chương trình của tôi có đang chạy hay không và để khởi động lại nếu cần thiết.

Ngoài ra, bạn nên nhớ rằng tại cách viết trước màn hình, tmux , v.v., vì vậy đó là một cách đơn giản để có một vỏ tách rời, tức là một cái sẽ không chết khi bạn đăng xuất khỏi hệ thống.

Cuối cùng, bạn cũng nên chú ý rằng nó khác với cron, cũng đã có từ rất lâu. Những lời nói dối khác biệt trong thực tế là tại là thỉnh thoảng, trong khi cron, được như vậy lặp đi lặp lại, là phù hợp hơn cho công việc hệ thống mà thực sự cần phải được thực hiện mãi mãi theo chu kỳ cố định: trên thực tế, tại mang đến cho bạn môi trường của riêng bạn, với các thiết lập của riêng bạn ( và các lựa chọn) của biến môi trường, trong khi cron sử dụng một bộ biến môi trường tối thiểu (chỉ cần kiểm tra sự khác biệt trong PATH , làm ví dụ).


15
Cũng đáng để chỉ ra một điểm khác biệt với cron, đó là atgiữ lại môi trường của bạn như khi công việc được lên lịch: cùng thư mục làm việc, biến môi trường, ...
Carlos Campderrós

10
Ngoài ra, cũng batchgần giống như vậy at, nhưng sẽ chờ tải thấp thay vào đó, và rõ ràng, at -q zsẽ tự làm tốt công việc, trong khi đó at -q Zsẽ đợi thời gian, sau đó chờ tải xuống và cũng làm tốt công việc. Wow, thật là một tải các tính năng hiếm khi được sử dụng!
Ulrich Schwarz

16

Tôi sử dụng atlệnh khi tôi cần thực hiện một số xử lý nặng về dữ liệu mà tôi muốn thực hiện trong đêm, khi tôi không ở phía sau máy tính của mình. Tất nhiên tôi có thể bắt đầu quá trình ngay sau khi tôi rời đi, nhưng đây là điều tôi có xu hướng quên.

Kết quả của lệnh không khác với việc thường xuyên thực thi tập lệnh hoặc lệnh.


15

Khi bạn có câu hỏi như thế này luôn luôn tham khảo các trang người đàn ông. Họ có thể rất giác ngộ.

Những gì nó làm

trích từ tại trang người đàn ông

NAME
       at, batch, atq, atrm - queue, examine or delete jobs for later execution

DESCRIPTION
       at  and  batch  read  commands  from  standard  input or a specified file
       which are to be executed at a later time, using /bin/sh.

Sử dụng

Việc sử dụng các công cụ:

Usage: at [-V] [-q x] [-f file] [-mldbv] timespec ...
       at [-V] [-q x] [-f file] [-mldbv] -t time
       at -c job ...
       atq [-V] [-q x]
       atrm [-V] job ...
       batch

atbao gồm 4 lệnh ( at, atq, atrm, và batch). Bạn sử dụng atbatchlên lịch cho các công việc, atqđể xem những gì đã lên lịch và atrmđể loại bỏ một công việc trước khi nó chạy.

$ at -f <cmd> timspec

Timespec

Thời gian để chạy atcông việc có thể được chỉ định theo những cách khác nhau.

đoạn trích ở trang người đàn ông

Tại cho phép thông số kỹ thuật thời gian khá phức tạp, mở rộng tiêu chuẩn POSIX.2. Nó chấp nhận thời gian của mẫu HH: MM để điều hành công việc tại một thời điểm cụ thể trong ngày. (Nếu thời gian đó đã qua, ngày hôm sau được giả định.) Bạn cũng có thể chỉ định vào giữa đêm, trưa hoặc giờ (4 giờ chiều) và bạn có thể có một thời gian trong ngày với hậu tố AM hoặc PM để chạy vào buổi sáng hoặc buổi tối Bạn cũng có thể cho biết ngày nào công việc sẽ được thực hiện, bằng cách đưa ra một ngày trong mẫu tên tháng theo năm với một năm tùy chọn hoặc đưa ra ngày của mẫu MMDD [CC] YY, MM / DD / [CC] YY, DD.MM. [CC] YY hoặc [CC] YY-MM-DD. Đặc điểm kỹ thuật của một ngày phải tuân theo đặc điểm kỹ thuật của thời gian trong ngày. Bạn cũng có thể đưa ra thời gian như bây giờ + đếm đơn vị thời gian, trong đó đơn vị thời gian có thể là phút, giờ, ngày,

Ví dụ

Nói rằng bạn có kịch bản shell này.

$ cat mycrontest.sh

#!/bin/bash
 echo "It is now $(date +%T) on $(date +%A)"

Chạy mẫu:

$ ./mycrontest.sh
It is now 18:37:42 on Friday

Mẫu tại trình công việc:

$ at -f mycrontest.sh  10pm tomorrow
job 14 at Sun Jul  8 22:00:00 2007

$ at -f mycrontest.sh 2:00 tuesday
job 15 at Tue Jul 10 02:00:00 2007

$ at -f mycrontest.sh 2:00 july 11
job 16 at Wed Jul 11 02:00:00 2007

$ at -f mycrontest.sh 2:00 next week
job 17 at Sat Jul 14 02:00:00 2007

Tài liệu tham khảo


Tôi dường như có một phiên bản rất khác atcó sẵn trên bản cài đặt Cygwin của tôi - nó dường như không được liên kết với batch, không có tùy chọn ngắn nào được hỗ trợ, không có tùy chọn yên tĩnh và không có manhoặc có infotrang nào được bao gồm.
Hashim

@Hashim - Cygwin là con thú của riêng nó.
slm

6

Bạn có thể thực thi các công việc bó trong UNIX / Linux bằng bất kỳ một trong ba lệnh - at, batch hoặc cron.

Lên lịch làm việc bằng cách sử dụng ngày giờ cụ thể

Syntax:

    $ at time date
For example, to schedule a job at 11 am on May 20, use the following at command.

    $ at 11 am may 20

Vâng, tôi có sự hiểu biết về "tại" và cách sử dụng của nó. Những người khác đã trả lời nó phù hợp hơn.
Akshay Patil

5

Quản trị viên mạng của bạn thông báo cho bạn rằng một số bảo trì sẽ xảy ra với các máy chủ web của bạn bắt đầu lúc 7 giờ tối và kết thúc trước 2 giờ sáng. Bạn muốn cung cấp thông báo bảo trì trước và bạn muốn thời gian hoạt động tối đa từ hệ thống của mình. Bạn sẽ thức suốt đêm, sẵn sàng để chạy các lệnh khác nhau, và sau đó khởi động lại sau? Không, bạn muốn sử dụng atđể lên lịch cho các nhiệm vụ này, sau đó đi ngủ / chơi skyrim và quên nó đi.


1

atcũng có thể là một cách thực sự tiện dụng để tắt lời nhắc. Máy dev hiện tại của tôi đang chạy OSX, atvà đơn giản notify.bashmà tôi đã ghép lại với nhau có thể thực sự hữu ích:

$ at 5pm
notify.bash -t 'Work is over' -m "Don't forget to rollback INT environment"
^D
$ at now + 15 minutes
notify.bash -m 'Check tests' -l 'http://integration.example.com/jobs/XXXX'
^D
$ at now + 10 minutes
notify.bash -m 'Check the fridge, pudding should be done!'
^D

notify.bash

#!/bin/bash

DEFAULT_TITLE='Hey! Listen!'
TITLE="$DEFAULT_TITLE"
LINK=
MESSAGE=

function args.help () {
    local error="$1"
    if [ "$error" ]; then
        echo >&2 "$error"
    fi
    cat >&2 <<EOF
Usage $0 <options>

Displays a message using an Applescript notification box

Options
-------

--title <text>    Sets the title, otherwise the default is used ("$DEFAULT_TITLE")
 -t     <text>    Alias for --title

--link  <url>     Add a button to open a link
 -l     <url>     Alias for --link

--body  <text>    Set the message body
 -m     <text>    Alias for --body
EOF
}

function args.verify-not-empty () {
    local value="$1"
    local varname="$2"

    if [ "$value" ]; then
        echo "$value"
    elif [ "$varname" ]; then
        args.help "$varname cannot handle an empty argument"
        exit 1
    else
        args.help \
            "The programmer forgot to include context, something was empty which shouldn't have been, but I can't tell you much more than that. Sorry :("
        exit 1
    fi
}

function args.parse () {
    while [ "$1" ]
    do
        case "$1" in
            '-t' | '--title')
                shift
                TITLE=$(args.verify-not-empty "$1" title)
                shift
                ;;
            '-l' | '--link')
                shift
                LINK=$(args.verify-not-empty "$1" link)
                shift
                ;;
            '-m' | '--body')
                shift
                if [[ "$1" = '-' ]]; then
                    MESSAGE=$(cat -)
                else
                    MESSAGE="$1"
                fi
                MESSAGE=$(args.verify-not-empty "$MESSAGE" body)
                shift
                ;;
            *)
                args.help "Unrecognized argument: $1"
                exit 1
        esac
    done
    if [[ ! "$MESSAGE" ]]; then
        args.help "Message body was not specified"
        exit 1
    fi
}

function message.display-no-link () {
    osascript > /dev/null <<EOF
tell application "Finder"
  activate
  display alert "$TITLE" ¬
          message "$MESSAGE" ¬
          buttons { "Acknowledge" } ¬
          default button "Acknowledge"
end tell
return
EOF
}

function message.display-with-link () {
    osascript > /dev/null <<EOF
tell application "Finder"
  activate
  display alert "$TITLE" ¬
          message "$MESSAGE\n\nClick 'Open Link' to go to $LINK" ¬
          buttons { "Acknowledge", "Open Link" } ¬
          default button "Open Link"
          set response to button returned of the result
          if response is "Open Link" then open location "$LINK"
end tell
return
EOF
}

function message.display () {
    if [ "$LINK" ]; then
        message.display-with-link
    else
        message.display-no-link
    fi
}

args.parse "$@"
message.display
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.