oo22rus

Рейтинг
36
Регистрация
10.10.2011

Решение для Ubuntu 15.10 (думаю в 15.04 и выше работает тоже):

Так как Ubuntu имеет смешанную систему инициализации. В Ubuntu 14.10 и ниже - sysv и upstart, в Ubuntu 15.04 - upstart и systemd.

Не забываем менять user на свой

Создадим новый файл, я назвал его finish-yandex, с таким содержанием:

[Unit]

Description=Save Yandex config
After=systemd-user-sessions.service

[Service]
ExecStop=/bin/bash '/home/user/.yandex_ram/finish-yandex.sh'
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target reboot.target poweroff.target

Немного о файле

[spoiler]Unit - общая информация.

Description - описание сервиса.

After - задаёт порядок загрузки. В моём случае после старта сессии пользователя.

Service - содержит информацию о службе

ExecStop - Выполняет команду при остановке сервиса.

Type - Типы службы. oneshot полезен для скриптов, которые выполняют одно задание и завершаются

Install - когда юнит должен быть активирован[/spoiler]

finish-yandex.sh для теста содержит:

#!/bin/sh

echo "it works test" >> /home/user/.yandex_ram/test.log

Делаем файл finish-yandex исполняемым:

sudo chmod +x /home/user/.yandex_ram/finish-yandex

Копируем файл в /etc/systemd/system с расширением *.service:

sudo cp /home/user/.yandex_ram/finish-yandex /etc/systemd/system/finish-yandex.service

Перезагружаем systemd для поиска новых или измененных юнитов:

sudo systemctl daemon-reload

Включаем юнит в автозапуск при загрузке системы:

sudo systemctl enable finish-yandex.service

Перезагружаемся и проверяем. У меня все заработало, файл test.log появился после перезагрузки.

Что бы проверить для начало без перезагрузки, можно запустить и остановить юнит:

sudo systemctl start finish-yandex.service


sudo systemctl stop finish-yandex.service

Для отключения юнита из автозапуск при загрузке системы:

sudo systemctl disable finish-yandex.service

Полезная ссылка о systemd - тык.

В первом посте решение скорей всего подойдет для Ubuntu 14.10 и ниже

Сентябрь:
А руками не пробовали запустить?
Перенаправление >> не создаёт файл, лишь дописывает в существующий.

Проблема не в этом, скрипт из консоли отрабатывает, если нет файла то он его создает.

Мне нужно что бы скрипт выполнялся при выключении или перезагрузке.

ps: Почти сделал...

baas:
А не проще добавить в крон?
@reboot /etc/init.d/finish-yandex.sh

Не знал.

Можно уточню, то есть если я нажму перезагрузку, то он сначала выполнит скрип, а потом уже перезагрузиться?

ps: Это не сервер..

Оптимизайка:
Добавьте в /etc/rc.local. В современных системах и другие системы инициализации могут быть :)

P.S. Сорри, вам при выключении надо, не подходит.

и при перезагрузке =)

---------- Добавлено 31.01.2016 в 18:36 ----------

smart2web:
BugReport:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718232
А по теме вот тут все подробно http://tuksik.ru/auto-start-and-shutdown/

Я уже тут был http://tuksik.ru/auto-start-and-shutdown/, сделал примерно то же самое. Но мне тут подсказали, что

"Ubuntu имеет смешанную систему инициализации. В Ubuntu 14.10 и ниже - sysv и upstart, в Ubuntu 15.04 - upstart и systemd." тык.

---------- Добавлено 31.01.2016 в 18:58 ----------

baas, В документации cron пишут что

@reboot Запуск при загрузке

То есть мне это не подходит получается...

Пробую делать на phantomjs...

Artisan:
Ваш сайт, или чужой?

Сайт чужой.

Artisan:
Получать данные куда?

Отправлять на обработку php скрипту.

Пробовал реализовать через fsockopen:

Пример на тестовом сайте

$fp = fsockopen("multeor.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: multeor.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}

В результате js скрипт не грузятся...

Вопрос на будущие, а можно к websocket подключиться и отправлять данные на обработку как только они поступают?

c12o16h1:
Замените:
$('a').live("click", function()
на
$('a').on("click", function()

Так и сделал =)

Дикий пионер:
В общем и целом отличие live от click в том, что live будет работать и на элементах, которые были на странице в момент его вызова и на тех, что будут вставлены в DOM после его вызова.
Чтобы сохранить подобную функциональность вам по идее надо заменить live на
.on("document","a",function(){}); иначе у вас могут перестать работать клики на ссылках в подгруженном контенте.

Теперь понятно, заменил на .on(), спасибо.

BrightGuy:
В консоли ошибки есть?

---------- Добавлено 08.08.2015 в 15:17 ----------


У вас в 2 строке вызов .live() судя по http://api.jquery.com/live/ от этого метода отказались в версии 1.9. Ну и в доке вот что советуют:



---------- Добавлено 08.08.2015 в 15:19 ----------

Так же попробуйте заменить $ на jQuery везде в скрипте

Да в консоли ошибки появились, заменил на live на delegate и вот что получил в консоли если интересно:

Uncaught TypeError: (b || "").match is not a function 

n.event.add @ jquery.min.js:3
(anonymous function) @ jquery.min.js:3
n.extend.each @ jquery.min.js:2
n.fn.n.each @ jquery.min.js:2
n.fn.extend.on @ jquery.min.js:3
n.fn.extend.delegate @ jquery.min.js:4
(anonymous function) @ contacts.php:20
n.Callbacks.j @ jquery.min.js:2
n.Callbacks.k.fireWith @ jquery.min.js:2
n.extend.ready @ jquery.min.js:2
I @ jquery.min.js:2

Но в принципе у меня все заработало, заменил live на click. Но где-то на днях прочитал, что

click не рекомендуется использовать, а почему не было написано. Вот и не знаю теперь, правильно ли так как я сделал или нет...

Спасибо, подтолкнул в правильном направление :)

zexis, хорошо, сейчас займусь этим.

poiuty:
http://www.linuxatemyram.ru/
не хотите, чтобы свопалась - используйте vm.swappiness=0

Окей, спасибо, сейчас буду экспериментировать.

Всего: 47