Проблема в том, что в последней строке скрипта нужно указать полный абсолютный путь к файлу tables.txt
, иначе задание cron не сможет его найти.
Причина, по которой скрипт работает, когда вы запускаете его вручную, заключается в том, что файл tables.txt
находится в текущем каталоге, поэтому у системы нет проблем с его поиском.
TL;DR... просто удалите ненужное имя файла (с помощьюrm
).
Если вы создаете жесткую ссылку (, что и делает ваша команда выше ), у вас есть два имени, указывающих на одну и ту же область памяти. Вы можете удалить любое имя, не затрагивая другое имя или хранилище -. Только когда удаляется последнее имя, область хранилища освобождается.
Сравните это с программными ссылками... созданными с помощью ln -s
-, здесь ссылка другая, это указатель на исходное имя, а не указатель на хранилище. Если вы удалите исходный именованный файл, программные ссылки указывают на что-то, что было удалено, поэтому ссылка остается, но не работает.
В большинстве существующих ответов рекомендуется использовать rm
. Это совершенно правильно, потому что вы не удаляете файлы :, вы удаляете ссылки (, и файл удаляется, когда удаляется последняя ссылка, указывающая на него, и закрывается последний открытый файловый дескриптор ).
Однако следует знать и о другой полезности, unlink
. В нем отсутствуют параметры rm
, и всегда есть неявный -f
параметр (вроде --, он не будет работать с отсутствующим файлом, хотя ). Преимущество в том, что вы можете удалить файл, начинающийся с дефиса, по крайней мере в теории...
...за исключением того, что вы не можете, если вы используете систему Linux, потому что GNU искалечил утилиту unlink
, добавив поддержку опции строки команды -! Таким образом, unlink -t
не удаляет файл с именем -t
в системе Linux или любой другой системе, использующей GNU coreutils.
(Да, я знаю, что rm -- -t
или unlink -- -t
работает, нет необходимости комментировать это.)