Консоль – вещь хорошая, но не все чувствуют в ней себя уверенно. Пару дней назад меня в очередной раз спросили, как же настроить монтирование SSD-диска с опцией noatime без применения консоли.

Я раньше привычно рекомендовал Lingon для создания задания, запускающегося при старте системы из LaunchDaemons под root’ом.

Но дань моде и похвальное желание заработать на своём труде заставили разработчика портировать утилиту в Mac App Store. Lingon 3 доступен за $2.99.

Оказывается, что в LaunchDaemons задание записать невозможно из-за ограничений на приложения Mac App Store. Выдаётся ошибка:

01-lingon

Разработчик на странице своей программы не предупреждает о таком урезании функционала, делающим программу практически бесполезной по крайней мере для моей задачи.

В конце страницы есть ссылка на FAQ, где текст сильно радует:

Can I run a job as root?

No, there is no way to run it as root by using Lingon to comply with the Mac App Store rules. But what you can do is create a new but before you save it you choose “Copy Plist to Clipboard” in the Job menu and the press Cancel.

Then open Terminal and make sure that you are an administrator. Write:

sudo pico /Library/LaunchDaemons/<your chosen name>.plist

and then enter and then paste the contents from Lingon. Then press ctrl-x and choose to save it. Then you need to load it manually with this command:

sudo launchctl load /Library/LaunchDaemons/<your chosen name>.plist

Подумать только – утилита предназначена исключительно для людей, не желающих работать с терминалом, но она же мелким шрифтом рекомендует устранить свои ограничения, запустив терминал. Порадовал разработчик, ничего не скажешь.

Вердикт: ни в коем случае не покупайте Lingon 3.

Если же вы программу купили, то расскажу, как всё-таки сделать нужный скрипт через неё. Рассматривайте дальнейший текст, как стёб – утилита бесполезна. Не стирать же готовую заметку…

Запускаю:

02-lingon

New Job, записываю файл в предлагаемый каталог LaunchAgents (внимание – задание будет запущено только при входе пользователя в системы). me.ctrld.noatime = имя моего домена ctrld.me в обратной нотации и название задания.

03-lingon

Ввожу команду “/sbin/mount -vuwo noatime /” для перемонтирования с noatime. В “When” ничего не выбираю.

04-lingon

Save. Выхожу. Захожу в Terminal.app… Ввожу команду:

$ sudo cp Library/LaunchAgents/me.ctrld.noatime.plist /Library/LaunchDaemons/

Редактирую файл и добавляю две строки, выделенные жирным (бинго! не правда ли, Lingon заменил все ужасы работы в консоли на ужасы работы в консоли?):

$ sudo vim /Library/LaunchDaemons/me.ctrld.noatime.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>me.ctrld.noatime</string>
        <key>ProgramArguments</key>
        <array>
                <string>/sbin/mount</string>
                <string>-vuwo</string>
                <string>noatime</string>
                <string>/</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>

Перезагружаю систему. Проверяю:

$ mount | grep " / "
/dev/disk0s2 on / (hfs, local, journaled, noatime)

Радуюсь “отличной” утилите Lingon, которая несмотря на GUI даёт поработать с консолью.

Но если вам нужны задания, выполняемые после входа в систему, то может Lingon вам и пригодится.