В чем разница между "периодическим" и "cron" в OS X?

  1. Я купил книгу по OS X и там написано, что launchd теперь управляет расписанием задач cron, это правда?
  2. Также это говорит о том, что если я помещаю команды в /etc/daily.local что они будут выполняться после сценариев в /etc/periodic/daily,

    В моем /etc/daily.local сценарий, у меня просто есть простой touch Команда (которая просто создает файл), чтобы я мог проверить, работает ли он.

    Я запускал вручную

    sudo /usr/sbin/periodic daily 
    

    заставить его выполнить. Файл не был создан.

  3. Где я ошибся или неправильно что-то понял? Как я должен планировать задачи cron в OSX Lion? Почему моя книга сказала мне сделать это таким образом?

Я начинаю думать periodic отличается от cron , Что такое /usr/sbin/periodic ?

2 ответа

Решение

Файлы в /etc/period действительно отличаются от cron и crontabs. Я не советую возиться с этим. Вместо этого используйте корневую запись в crontab. Бежать sudo crontab -e и добавьте эти строки:

MAILTO=me@foo.com
0 0 * * * sh /path/to/your/script

Первая строка указывает cron отправлять любые выходные данные из скрипта на me@foo.com; измените me@foo.com на свой адрес электронной почты.

Вторая строка говорит cron запускать ваш скрипт каждый день в полночь.

  1. Я купил книгу об OS X, и в ней написано, что launchd теперь управляет планированием задач cron, это правда?

Да, это правда, согласно разделу «Планирование заданий по времени» в Руководстве по программированию демонов и служб. Задания устарели, и их использование является предпочтительным способом управления задачами планирования, а не .

Фактически, оба и управляются , как вы можете видеть ниже или описано на страницах руководстваperiodic(8)иcron(8).

      $ sudo launchctl list | grep 'periodic\|cron'
6706    0       com.apple.systemstats.microstackshot_periodic
-       0       com.apple.periodic-monthly
-       0       com.apple.periodic-weekly
21057   0       com.apple.periodic-daily
-       0       com.vix.cron

$ cat com.vix.cron.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.vix.cron</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/sbin/cron</string>
        </array>
        <key>KeepAlive</key>
        <dict>
                <key>PathState</key>
                <dict>
                        <key>/etc/crontab</key>
                        <true/>
                </dict>
        </dict>
        <key>QueueDirectories</key>
        <array>
                <string>/usr/lib/cron/tabs</string>
        </array>
        <key>EnableTransactions</key>
        <true/>
</dict>
</plist>
  1. Также там сказано, что если я помещу команды в /etc/daily.local, они будут выполняться после сценариев в /etc/ periodic/daily.

В моем сценарии /etc/daily.local у меня есть простая сенсорная команда (которая просто создает файл), поэтому я могу проверить, работает ли она.

я запускал вручную

sudo /usr/sbin/periodic daily, чтобы принудительно выполнить его. Файл так и не был создан.

Я протестировал его, и он работает на моей машине под управлением macOS Catalina. /etc/daily.localфайл определен в/etc/defaults/periodic.confфайл и выполняться/etc/periodic/daily/999.localсценарий. Поэтому убедитесь, что у вас есть оба файла.

      $ cat /etc/periodic/daily/999.local
#!/bin/sh
#
# $FreeBSD: src/etc/periodic/daily/999.local,v 1.5 2001/06/01 16:40:55 dougb Exp $
#
# Run the old /etc/daily.local script.  This is really for backwards
# compatibility more than anything else.
#

# If there is a global system configuration file, suck it in.
#
if [ -r /etc/defaults/periodic.conf ]
then
    . /etc/defaults/periodic.conf
    source_periodic_confs
fi

rc=0
for script in $daily_local
do
    echo ''
    case "$script" in
        /*)
            if [ -f "$script" ]
            then
                echo "Running $script:"

                sh $script || rc=3
            else
                echo "$script: No such file"
                [ $rc -lt 2 ] && rc=2
            fi;;
        *)
            echo "$script: Not an absolute path"
            [ $rc -lt 2 ] && rc=2;;
    esac
done

exit $rc
  1. Где я ошибся или что-то не так понял? Как мне планировать задания cron в OSX Lion? Почему моя книга посоветовала мне сделать это именно так?

/questions/16530/v-chem-raznitsa-mezhdu-periodicheskim-i-cron-v-os-x/16532#16532 был хороший и краткий ответ от @kyle-jones, я собираюсь привести пример вlaunchdпуть сюда, проверьте это здесь для более подробной информации.

Следующий список свойств запускает программуhappybirthdayв полночь каждый раз, когда 11 июля выпадает на воскресенье. Сохраните его как «foo.plist» и запустите с помощью командыlaunchctl load /path/to/plist.

      <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.happybirthday</string>
    <key>ProgramArguments</key>
    <array>
        <string>happybirthday</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Day</key>
        <integer>11</integer>
        <key>Hour</key>
        <integer>0</integer>
        <key>Minute</key>
        <integer>0</integer>
        <key>Month</key>
        <integer>7</integer>
        <key>Weekday</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

Я начинаю думать, что это отличается от cron. Что /usr/sbin/periodic?

The periodicэто утилита, написанная на языке оболочки, которая организовывает сценарии в отдельные папки с именамиdaily,weeklyиmonthlyи предназначен для вызоваlaunchd(8)для выполнения сценариев оболочки, расположенных в указанном каталоге, в нужное время.

      $ file `which periodic`
/usr/sbin/periodic: POSIX shell script text executable, ASCII text
$ tree -Ca /etc/periodic/
/etc/periodic/
|-- daily
|   |-- 110.clean-tmps
|   |-- 130.clean-msgs
|   |-- 140.clean-rwho
|   |-- 199.clean-fax
|   |-- 310.accounting
|   |-- 400.status-disks
|   |-- 420.status-network
|   |-- 430.status-rwho
|   `-- 999.local
|-- monthly
|   |-- 199.rotate-fax
|   |-- 200.accounting
|   `-- 999.local
`-- weekly
    `-- 999.local
Другие вопросы по тегам