Чому команда, запущена з nohup, не може записати файл після виходу з користувача?


4

Я використовую nohup для запуску matlab та запуску сценарію, який вимагає для читання та запису деяких файлів.

nohup matlab -nojvm -nodisplay -r 'MyScript'&

Це працює безперебійно, коли я входжу в систему, але як тільки я виходжу і знову входжу, я бачу, що мій процес matlab більше не працює. Після перевірки файлу nohup.out я знаходжу таке повідомлення про помилку:

Unable to write file $HOME/matlab/my_mat_file.mat: permission denied

Здається, що як тільки я виходжу, власник процесу matlab змінюється, і він більше не має доступу до моїх файлів. Як я можу запобігти появі цієї помилки без зміни дозволів на файли, наприклад, наданням дозволу на запис усім?

Це повідомлення про помилку з'являється також під час використання екрана GNU. Якщо я запускатиму ls -al $HOMEсеанс GNU-екрана перед виходом із системи, у мене буде

команда перед виходом

Я відключаю форму сеансу GNU на екрані, виходжу з системи, входжу в систему і повторно приєднуюся до екранного сеансу, щоб виявити, що я втратив доступ до файлів, до яких я мав доступ до внутрішнього екрана. Вихід ls -al $HOMEзараз

команда після виходу

Інтригуюче, чи не так?


Чи є у вас домашній каталог з мережею або зашифрований домашній каталог, який зникає під час виходу?
Даніель Бек

Я отримую доступ до облікового запису AFS на кластері Unix за допомогою PuTTY.
варіант

Можливо, ваша проблема полягає в тому, що домашній каталог вимкнено під час виходу з системи. Перевірте відповідний сценарій, який, наприклад, дзвонить ls -la $HOMEщосекунди і записує висновок у файл у /tmp.
Даніель Бек

@Daniel Я припускаю, що якщо мій домашній каталог де можна відключити, lsвін не зможе повернути його вміст, правда? Ну, я створив сеанс GNU-екрану, який працює ls -la $HOMEкожні кілька секунд, поки його вихід записувався у файл /tmp, як і запропоновано. Після від'єднання від екрана та виходу з системи я знову ввійшов у систему і виявив, що між результатами ls -al $HOMEвходу або виходу з системи не було різниці . Зауважте, що, хоча моє питання стосується nohupтієї ж проблеми, виникає під час використання сеансу на екрані GNU.
варіант

Даніель говорить про автофіксацію - монтує домашній каталог лише тоді, коли ви ввійшли в систему. Немає простого вирішення вашої проблеми, крім того, щоб переконатися, що у вас є хоча б один поточний інтерактивний процес. Створіть, наприклад, окремий "фіктивний" сеанс. Або запишіть у файли у відомий каталог типу / tmp, який не зникає.
jim mcnamara

Відповіді:


2

Це стосується автентифікації.

Почну з деяких понять про квитки та жетони та про те, як система аутентифікації Kerberos та AFS використовує їх. Зрештою, відповідь на моє запитання буде зрозумілою, мені не дозволяється писати у файл просто тому, що мій маркер AFS був видалений під час виходу. Однак, для моєї проблеми рішенням було включити в сценарій matlab кілька рядків, які визначають, чи існує маркер чи не створює його, якщо він не є. Як саме це було зроблено, точно завершується відповідь.

Аутентифікація

Надання розподіленої файлової системи, доступної форми в будь-якому місці, передбачає надійну систему безпеки. Ось чому AFS має потужну систему аутентифікації, інтегровану із системою аутентифікації Kerberos.

Аутентифікація в AFS вирішується за допомогою маркера. Токени надають користувачам доступ до даних протягом їхнього життєвого періоду. У багатьох випадках обробка токенів проходить безшовно, не вимагаючи втручання користувача. Однак користувач може в будь-який момент перелічити маркери, видані в його імені, використовуючиtokens

username@machine00 ~ $ tokens

Tokens held by the Cache Manager:

User's (AFS ID xxxxx) tokens for afs@your.system.domain [Expires Mar 20 05:10]
   --End of list--

Токени AFS отримуються з ідентифікаційного квитка Kerberos. Подібно до жетонів Kerberos квитки також ідентифікують користувача. Під час використання системи автоматизації Kerberos користувачеві видається KDC (Центр розподілу ключів) початковий квиток, який називається путівкою. Цей перший квиток однозначно ідентифікує користувача та дозволяє йому отримати конкретні квитки, необхідні для подальших послуг, як токени AFS. Насправді, ви можете безпосередньо використати квиток на Kerberos для послуги AFS, що має маркер ідентифікації AFS.

У більшості випадків квитанція про надання Керберосу автоматично отримується під час входу користувача. Те саме відбувається з початковим маркером AFS. Як і жетони, обробка квитків у Kerberos у більшості випадків невидима для користувача, але ви можете перелічити видані квитки, використовуючиklist

username@machine00 ~ $ klist
Credentials cache: FILE:/tmp/krb5cc_V16088
        Principal: username@KERBEROS.REALM.DOMAIN

  Issued           Expires          Principal                 
Mar 19 19:10:11  Mar 20 05:10:11  krbtgt/KERBEROS.REALM.DOMAIN@KERBEROS.REALM.DOMAIN
Mar 19 19:10:11  Mar 20 05:10:11  afs/your.system.domain@KERBEROS.REALM.DOMAIN   
username@machine00 ~ $

кеш облікових даних - це розташування файлу, де можна знайти квитки. Principal - це ідентифікатор користувача, який в основному є результатом поєднання імені користувача та області домену Kerberos. Зауважте, що область Kerberos, як правило, задається великими літерами, і вона відрізняється великими літерами. Слідом ми маємо список виданих квитків із відповідними виданими та термінами придатності. У цьому випадку перший квиток ( krtbg) відповідає квитанції про надання квитка на царині, KERBEROS.REALM.DOMAINа другий відповідає токену AFS у комірці afs your.system.domain(який зазвичай має те саме ім'я, що і домен, у якому його можна знайти). Інші квитки на Kerberos можуть відображатися в списку, якщо вони були запитані.

Поновлення токенів

Коли термін дії AFS закінчується, доступ до акаунта AFS більше не можливий. Симптоми того, що така подія, що сталася, варіюються від ОС до ОС, однак в Unix / Linux зазвичай отримують повідомлення про відмову в дозволі, намагаючись отримати доступ до своїх файлів:

username@machine00 ~ $ ls
ls: .: Permission denied

Коли термін дії терміну закінчиться, його потрібно відновити. Простий спосіб зробити це - знову вийти з системи та увійти, оскільки, у більшості випадків, оновлення токенів відбувається автоматично під час входу. Але виявляється, що іноді вихід із системи - це не варіант, особливо якщо ви працюєте з тим, з чого не хочете виходити.

Альтернативне рішення для поновлення квитка використовується kinitі aklogв послідовності. Перша з цих команд ( kinit), для якої потрібен ваш пароль, дозволяє повторно пройти автентифікацію користувача та поновити квиток. Далі aklogкоманда дозволяє отримати маркер AFS з квитка Kerberos. Зверніть увагу, що kinitнамагається отримати квиток для головного та царини за замовчуванням. Якщо вони не визначені, або якщо користувач використовує інше ім’я користувача під час запиту на отримання квитка, його kinitслід використовувати kinit <principal>@<realm>, наприклад:

username@machine00 ~ $ kinit username@KERBEROS.REALM.DOMAIN
username@KERBEROS.REALM.DOMAIN's Password: 
username@machine00 ~ $

Протилежне aklogтому unlog, що видаляє маркер AFS. Відповідно, kdestroyвидаляє файл квитків, видаляючи всі квитки Kerberos.

Як це врятувало день і допомогло мені полюбити своїх друзів та родину

Як було сказано на початку, знання про ці поняття допомогло мені краще зрозуміти, що відбувається з моїм сеансом з математики. Після виходу мого маркера AFS вже не було, і мої запущені процеси вже не мали дозволу писати в мій afs том. Оскільки на даний момент мене цікавить лише гарантування того, що мій сценарій matlab продовжує працювати з читанням і записом файлів навіть після того, як я вийшов, я обережно включив тест на маркер AFS, який був попереднім до будь-якого доступу до тома AFS

ticket_status = unix('klist -s');
if ticket_status ~= 0,
   unix 'kinit username@KERBEROS.REALM.DOMAIN <<< "password"';
   unix  aklog
end

Як я вже сказав, це входить у сценарій matlab, і я розмістив його перед будь-якими командами saveабо loadкомандами matlab. Код використовує команду matlab unixдля запуску своїх аргументів на оболонці Unix та повернення результатів. Команда Unix klist -sпрацює klistбезшумно, але повертає свій статус виходу. Ми перевіряємо статус виходу на наявність облікових даних і вимагаємо нових, якщо вони не існують або закінчилися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.