Jump to content
Калькуляторы

Странности с планировщиком (Debian Linux, cron)

10 minutes ago, Andrei said:

чё, реально?! или это шутка юмора такая?

 

Все же в сырцы заглядывать никто не мешает. 5 секунд дела:

 

> apt-get source cron

 

	(void) gethostname(hostname, MAXHOSTNAMELEN);
	(void) snprintf(mailcmd, sizeof(mailcmd),
			MAILARGS, MAILCMD, mailto);
	if (!(mail = cron_popen(mailcmd, "w", e))) {
		perror(MAILCMD);
		(void) _exit(ERROR_EXIT);
	}
	fprintf(mail, "From: root (Cron Daemon)\n");
	fprintf(mail, "To: %s\n", mailto);
	fprintf(mail, "Subject: Cron <%s@%s> %s%s\n",
			usernm,
			fqdn_in_subject ? hostname : first_word(hostname, "."),
			e->cmd, status?" (failed)":"");
# if defined(MAIL_DATE)
	fprintf(mail, "Date: %s\n",
			arpadate(&StartTime));
# endif /* MAIL_DATE */
	fprintf(mail, "MIME-Version: 1.0\n");

 ... и так далее ...

MAILCMD Определяется так:

 

#if !defined(_PATH_SENDMAIL)
# define _PATH_SENDMAIL "/usr/lib/sendmail"
#endif /*SENDMAIL*/

....

#define MAILCMD _PATH_SENDMAIL					/*-*/

... и неколько вариантов ...

/* #define MAILCMD "/bin/mail"			-*/
...
/* #define MAILCMD "/usr/mmdf/bin/submit"	-*/
...

 

Share this post


Link to post
Share on other sites
5 минут назад, jffulcrum сказал:

Отключить только перенаправлением stdout в /dev/null

Ну так в конце у меня и указано " >/dev/null 2>&1 "

Но не срабатывает.

 

2 минуты назад, vop сказал:

Все же в сырцы заглядывать никто не мешает.

Да я понимаю. Но в прошлых версиях это делалось на раз-два, а теперь обязательно в сырцы лазить, чтобы такое элементарное сделать? Не верится.

Share this post


Link to post
Share on other sites
8 minutes ago, Andrei said:

Да я понимаю. Но в прошлых версиях это делалось на раз-два, а теперь обязательно в сырцы лазить, чтобы такое элементарное сделать? Не верится.

 

Ээээ... Ну можно не лазить. Можно, например, на форуме спросить.

 

:) :) :) :) :)

 

Ну не знаю, кроны они разные бывают. Поэтому проще заглянуть. Я так подозреваю, что меня поэтому лет 20 и втянули буржуи в хостинговый бизнес, что у меня "на столе" всегда сырцы апачи и другого софта открыты были. Откуда и черпались точные знания о том, что и как работает.

Share this post


Link to post
Share on other sites
5 минут назад, vop сказал:

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

ОК, ты молодец, ты умный. :) А решение-то поставленного вопроса где?

Share this post


Link to post
Share on other sites
6 minutes ago, Andrei said:

ОК, ты молодец, ты умный. :) А решение-то поставленного вопроса где?

А что там решать то? Если нельзя почту отключить, надо послать ее в /dev/null.  Добавьте аккаунт в системе и отправьте его в/dev/null через алиасы.   Типа Vasiunchik DevNull (devnul) aliases:

 

devnul: /dev/null

 

Ну и определить MAILTO="devnul"

 

Как-то так. Решению отправлять почту в нул лет 30-40 как уже.:)

Share this post


Link to post
Share on other sites
26 минут назад, Andrei сказал:

в конце у меня и указано " >/dev/null 2>&1 "

Это не тоже самое (отправка в /dev/null)?

Share this post


Link to post
Share on other sites
1 minute ago, Andrei said:

Это не тоже самое?

Нет. Крон в STDOUT не  пишет. Я же там привел код, который должен, как бы сказать, что крон запускает sendmail и прямиком херачит туда вывод.

 

PS Есть еще вариант - похачить слегка и пересобрать crond. Но это диструктивный вариант :)

Share this post


Link to post
Share on other sites

Провел небольшой эксперимент - ничего не меняя в настройках системы и крона добавил в тот же крон еще задачу:

32 22 * * *     root cd /home/andrey; cat .screenrc   | gzip > "sc.`date +\%F`.gz" ; wput "sc.`date +\%F`.gz" ftp://............  >/dev/null 2>&1

скрипт отработал и... ничего на почту не пришло. Любопытно, да? :)

А если задачу закончить вот так


... ; rm *.gz >/dev/null 2>&1

то сообщение на почту приходит.

 

И финалочка - делим задачу на две:

32 22 * * *     root cd /home/andrey; cat .screenrc   | gzip > "sc.`date +\%F`.gz" ; wput "sc.`date +\%F`.gz" ftp://............  >/dev/null 2>&1
33 22 * * *    root cd /home/andrey ; rm *.gz >/dev/null 2>&1

Обе задачи отработали и ничего на почту не пришло.

Как это объяснить?

Share this post


Link to post
Share on other sites

Я сильно извиняться, но в дев нул вы завернули вывод команды rm *.gz

Все что до неё это отдельные команды и они в девнул не перенаправляются... то что Вам надо делается обрамлением всго от начала первой команды до перенаправления в круглые скобки. Кролн тут вообще не при делах. впросто наппишите 

echo a; echo b > /dev/null 

и возхадуйтесь вываоду буквы а

 

1 час назад, Andrei сказал:

Провел небольшой эксперимент - ничего не меняя в настройках системы и крона добавил в тот же крон еще задачу:


32 22 * * *     root cd /home/andrey; cat .screenrc   | gzip > "sc.`date +\%F`.gz" ; wput "sc.`date +\%F`.gz" ftp://............  >/dev/null 2>&1

скрипт отработал и... ничего на почту не пришло. Любопытно, да? :)

А если задачу закончить вот так


... ; rm *.gz >/dev/null 2>&1

то сообщение на почту приходит.

 

И финалочка - делим задачу на две:


32 22 * * *     root cd /home/andrey; cat .screenrc   | gzip > "sc.`date +\%F`.gz" ; wput "sc.`date +\%F`.gz" ftp://............  >/dev/null 2>&1
33 22 * * *    root cd /home/andrey ; rm *.gz >/dev/null 2>&1

Обе задачи отработали и ничего на почту не пришло.

Как это объяснить?

 чтением мана не sh ?

Share this post


Link to post
Share on other sites
4 минуты назад, st_re сказал:

то что Вам надо делается обрамлением всго от начала первой команды до перенаправления в круглые скобки.

Вот спасибо - то, что надо! :) Чувствовал, что что-то подобное должно быть, но гугл не подсказал.

И никаких разглядываний сырцов, новых юзеров и т.п. :)

Share this post


Link to post
Share on other sites

Вообще крон тащит не из /etc/crontab переменную MAILTO а для каждого файла свой лукап.

Так что надо положить MAILTO="" /cron.d/backup где ему и место в рамках обсуждаемого.

 

 

Ну и я уже молчу почему это не оформить скриптом человеческим а не использовать множественный вывод с повторяющимся перенаправлением  "> "

 

2 часа назад, vop сказал:

Нет. Крон в STDOUT не  пишет.

его стдаут в почту направляется 

Share this post


Link to post
Share on other sites
5 hours ago, GrandPr1de said:

его стдаут в почту направляется 

 

Если быть точнее, то stdout запускаемых задач.

 

Хотя, это уже не имеет значения. Я отвечал, как оказалось, не на тот вопрос.:)

 

Share this post


Link to post
Share on other sites
8 часов назад, GrandPr1de сказал:

Вообще крон тащит не из /etc/crontab переменную MAILTO а для каждого файла свой лукап.

Так что надо положить MAILTO="" /cron.d/backup где ему и место в рамках обсуждаемого.

Гугл говорит, что не так, ну да ладно.

 

8 часов назад, GrandPr1de сказал:

Ну и я уже молчу почему это не оформить скриптом человеческим а не использовать множественный вывод с повторяющимся перенаправлением  "> "

Так компактней, и при переезде на другой сервер забирать всего 1 файл из /etc/cron.d, а не собирать кучу скриптов отдельными файлами.

Share this post


Link to post
Share on other sites
В 09.11.2019 в 00:51, Andrei сказал:

Ну так в конце у меня и указано " >/dev/null 2>&1 "

Так-то указанное в конце перенаправление работает только для последней команды, а именно только для "rm *.gz". Добавьте ">/dev/null 2>&1 "  перед каждой точкой с запятой в строке, и порадуйтесь результату.

Share this post


Link to post
Share on other sites
1 минуту назад, taf_321 сказал:

Добавьте ">/dev/null 2>&1 "  перед каждой точкой с запятой в строке, и порадуйтесь результату.

Немного проще - https://forum.nag.ru/index.php?/topic/103520-strannosti-s-planirovschikom-debian-linux-cron/&amp;do=findComment&amp;comment=1573697

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now