Я пытаюсь выполнить сценарий через crontab, но некоторая работа сценариев, в то время как другой не делают. Почему это происходит?
username@here> crontab -l
00 13 * * * csh -c /home/apps/bin/jobnumberone.pl
00 18 * * * csh_cmd /home/apps/bin/forcestartjob.pl job_a
5 22 * * 1-5 csh_cmd /home/apps/bin/forcestartjob.pl job_b
5 1 * * 1-5 /home/apps/bin/forcestartjob.pl job_c
5 1 * * 1-5 /home/apps/test/write_to_file.sh
Мой write_to_file.sh
просто печатает текущее время в файл test1.txt
. Когда я проверяю test1.txt
, корректную метку времени показывают, который предлагает, чтобы у меня действительно было разрешение изменить crontab, и по крайней мере одно из crontab событий выполняются в корректное время. (Да, у меня действительно есть дополнительная строка в конце crontab файла.)
Кроме того, я могу непосредственно работать /home/apps/bin/forcestartjob.pl job_c
, но когда я пытаюсь выполнить его от crontab, это не выполняется. Полномочия для выполняются, кажись, быть допустимыми:
username@here> ls -l "/home/apps/bin/forcestartjob.pl"
-rwxr-xr-x 1 name name Jan 20 08:27 /home/apps/bin/forcestartjob.pl
Решение: Оберните всю команду в двойные кавычки.
Подсказка: Проверьте mail
, потому что это покажет Вам немного журнала. Это будет в каталоге как /var/mail
. Можно использовать cat /var/mail/username
для отображения всех сообщений.
Объяснение: Моя проблема была то, что мой сценарий потребовал, чтобы параметр передал в как аргумент в команде. crontab интерпретирует все разделенное пространством как отдельный объект, таким образом, моя команда имела ошибку при выполнении. Используя двойные кавычки позволит crontab выполнить все это как одну команду.
исключая:
Исходный =
csh -c /home/apps/bin/forcestartjob.pl job_b
Корректный =
csh -c "/home/apps/bin/forcestartjob.pl job_b"
Взял меня долгое время для нахождения этой глупой проблемы, но надо надеяться это помогает кому-то еще в будущем.