У меня ужасное время, когда вы запускаете скрипт bash, который использует wget для запуска в качестве запуска. Сценарий предназначен для автоматизации загрузки ежедневной кроссвордов New York Times. Обратите внимание, что для выполнения этой работы вам требуется подписка (USERNAME и PASSWORD).Сценарий bash/wget запускается из командной строки, но не запускается при запуске - выходные файлы не записаны
Оригинальный сценарий (который живет в http://web.mit.edu/lizdenys/Public/crossword) отлично работает и является впечатляющим и образовательным примером сценариев bash (по крайней мере для меня). Вот оргинал. Я изменил его для моего использования, включив пользователя и передав и комментируя шаги, чтобы загрузить что-либо, кроме версии PDF (мне нравится карандаш и бумага).
- = - = - = - = - = - = начать Баш скрипт - = - = - = - = - = - =
#!/bin/bash
# crossword,
# a wget-based nytimes crossword downloader
# Liz A. Denys ([email protected])
# Last updated on May 13, 2015
# This script downloads today's New York Times daily crossword. To
# use, you must change the email and password information below so
# that it corresponds to your premium New York Times account.
# Get the current date.
puzdate=`date "+%Y-%m-%d"`
pdfdate=`date "+%b%d%y"`
# Get the login page.
wget --no-check-certificate https://myaccount.nytimes.com/auth/login \
-O login.html &>/dev/null
# Scrape token and expires values so wget can auth.
token=`grep token login.html | sed -e 's/^.*value="\([0-9a-f]\+\)".*$/\1/'`
expires=`grep expires login.html | sed -e 's/^.*value="\([0-9a-f]\+\)".*$/\1/'`
# Log in with password. Note: this does not work without replacing
# username and password information.
wget --post-data \
"userid=USERNAME%40DOMAIN.COM&password=PASSWORDVALUE&is_continue=false&remember=true&token=$token&expires=$expires" \
--save-cookies=cookies.txt --keep-session-cookies --no-check-certificate \
-O /dev/null https://myaccount.nytimes.com/auth/login &>/dev/null
# Download puzzle in .pdf and .puz formats.
wget --load-cookies=cookies.txt \
http://www.nytimes.com/svc/crosswords/v2/puzzle/print/$pdfdate.pdf \
&>/dev/null
wget --load-cookies=cookies.txt \
http://www.nytimes.com/svc/crosswords/v2/puzzle/daily-$puzdate.puz \
&>/dev/null
# Clean up workspace.
rm cookies.txt
rm login.html
- = - = - = - = - = - = end bash script - = - = - = - = - = - =
Я сделал требуемое редактирование, и сценарий запускался из командной строки В ПЕРВОМ ПОПЫТКЕ!
Поскольку у меня нет доступа к интернету каждый день, и поскольку (насколько я знаю) головоломки больше не доступны на следующий день после их появления, я решил, что буду автоматизировать работу, чтобы работать каждый день. Я использовал cron (для инкрементных резервных копий на Sparcstation) без каких-либо проблем, что когда-либо (используя make, чтобы выбрать файлы для записи на ленту - это показывает мой урожай), но нет, Apple хочет, чтобы я использовал launchd. Я всегда рад узнать что-то новое и полезное, поэтому моя задача состояла в том, чтобы узнать достаточно о launchd и plists, чтобы выполнить эту чрезвычайно простую работу. Не так!!
Вот один из многих plists, что не удалось:
- = - = - = - = - = - = начать .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>local.me.nytxwd</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/Users/me/Documents/misc/nytimes_xword/nytimes_puzzle_dl4.sh</string>
</array>
<key>StandardErrorPath</key>
<string>/Users/me/Documents/misc/nytimes_xword/err</string>
<key>StandardOutPath</key>
<string>/Users/me/Documents/misc/nytimes_xword/tmp</string>
<key>WorkingDirectory</key>
<string>/Users/me/Documents/misc/nytimes_xword/</string>
</dict>
</plist>
- = - = - = - = - = - = конец .plist файл - = - = - = - = - = - =
Вот мои наблюдения:
-script работает отлично от команды line (с необходимыми модами) -script не работает при запуске с запуска (выход 1) в соответствии с -user (~/Library/LaunchAgents /). Системный журнал показывает, что файл, который ищет grep и содержит два основных бита данных, никогда не записывается в целевой каталог («grep token login.html - нет такого файла»).
Первоначально я пытался запускать работу StartCalendarInterval в 0900 каждый день, но когда это не удалось, я переключился на OnDemand, используя loadctl load/unload для отладки. Somethings, что я пробовал:
Указание пути в PLIST (ошибка, из, рабочий каталог) - никакой помощи
Изменение владельца и разрешений на целевом каталоге. - нет помощи
Изменение путей в сценарии, чтобы быть абсолютным (нет ~, нет $ HOME, no., no relative). - нет помощи https://myaccount.nytimes.com/auth/login \ -О /Users/me/Documents/misc/nytimes_xword/login.html &>/DEV/нуль>
Я прочитал страницы man для launchd, launchctl, launchd.plist без каких-либо прозрений.
Я искал каждую комбинацию launchd/bash/wget и узнал что-то, но все равно не имел успеха.
Я привел пример, предоставленный http://www.mactech.com/articles/mactech/Vol.21/21.06/launchd/index.html и он сработал! Однако это не иллюстрирует, как писать и читать текстовый файл в каталоге пользователя.
Mac OS X 10.5.8 если это имеет значение.
Я знаю, что это немного больше, чем типичный вопрос, заданный здесь, но я хотел избежать очевидных вопросов «вы попробовали».
Я предполагаю, что гуру собирается показать mojo запуска с простым и очевидным решением. Ну, по крайней мере, я буду переходить к шагу 2. запуск программ
Спасибо, JLH