Стартиране на cronjob в csh

Имам скрипт, написан на csh, който искам да изпълнявам всяка седмица.

Опитах да използвам cronjob за това, но изглежда, че cronjob се опитва да изпълни моя скрипт в sh и следователно не работи правилно.

Какво може да се направи, за да се гарантира, че скриптовете работят правилно в cronjob или има ли друг начин да постигна това, което се опитвам да направя, без да използвам cronjob?

Моята cron работа изглежда по следния начин:

0 0 * * 6 source ~/cron_job

~/cron_job изглежда нещо подобно:

#!/bin/csh
source ~/.cshrc;
source ~/test_setup;
source ~/start_test

Също така имайте предвид, че стартирането на source ~/cron_job директно на терминал работи по предназначение, но cronjob не работи. Получавам следната грешка:

/bin/sh: source ~/cron_job : No such file or directory

person nav_jan    schedule 07.01.2015    source източник
comment
Може би това може да помогне. dbforums.com/   -  person user1766169    schedule 07.01.2015
comment
Имаме нужда от повече информация. Как изглежда редът във вашия crontab? Скриптът изпълним ли е? Започва ли с правилен #! ред? Моля, актуализирайте въпроса си, за да предоставите тази информация.   -  person Keith Thompson    schedule 07.01.2015
comment
@Keith Актуализирах въпроса си. Благодаря!!   -  person nav_jan    schedule 07.01.2015


Отговори (2)


0 0 * * 6 source ~/cron_job

Това се опитва да "включи" или "източника" на файла в текущия скрипт; това е грешно поради редица причини:

  1. Опитвате се да извлечете csh скрипт;
  2. дори и да е sh скрипт, cron очаква да стартирате отделна програма, а не source нещо в текущия скрипт (може би ще работи, никога не съм опитвал, но помислете за два скрипта sourcing нещо, което има същите имена на променлива или функция. Ами сега!)

Правилният начин би бил:

0 0 * * 6 csh -f ~/cron_job

Това започва csh; -f е да предотврати зареждането на стартиращи файлове, което понякога може да попречи на изпълнението на скрипта.

person Martin Tournoij    schedule 07.01.2015
comment
Би било по-добре да имате #!/bin/csh -f в ~/cron_job и след това просто да извикате ~/cron_job от crontab файла. - person Keith Thompson; 10.01.2015

Най-вероятната причина за това поведение е, че имате bourne shell, конфигуриран във вашия /etc/profile файл.

cron(8) използва вашите /etc/profile данни, за да избере обвивката, която да използвате за изпълнение на вашите crontab(??) задачи, така че в случай, че искате да използвате друга обвивка, можете направете го в подпроцес, без да използвате източник.

Друг начин е да преминете към csh(1) и да го използвате вместо sh(1).

person Community    schedule 08.01.2015
comment
Поне за Vixie cron (версията, използвана от повечето дистрибуции на Linux), cron изпълнява команди, използвайки /bin/sh или обвивката, указана от променливата SHELL във файла crontab. /etc/profile обикновено не се използва за указване на обвивка; обвивката за влизане на всеки потребител е посочена в /etc/passwd или еквивалент, но това все още не влияе на начина, по който cron изпълнява команди. - person Keith Thompson; 10.01.2015